As we can see, we are just returning a value of the laser_range without checking if laser_range was already set. This is actually an error on our side.
The reason why it works after calling move() is because this move() method takes some seconds to finish, and while it is called, the laser_range receives a value through the laser_callback.
Thanks for letting us know about this error. We indeed have to fix this from our side.