There is a while-loop with a delay after the Wire.requestFrom() call. That while-loop is not needed and that delay is not needed.
When the Wire.requestFrom() function returns, the I2C transaction has completely finished and the received data is in the receive buffer in the Wire library. The Wire.read() only reads data from that buffer.