HMC5883L compass huge error [SOLVED]

Wire.requestFrom is blocking. That part is fine. Changing to waiting for it to become available simply builds in a potential endless loop. Either you get 6 bytes or you don't. Waiting doesn't change that.