you should unset the player from the array when they leave to save some memory incase they don't come back, when the server stops, you should save everything on the array to your MySQL and do DataConnector->waitAll() so you make sure it saves
You can't. You have to accept the fact that the array may not be initialized yet. Therefore, don't do anything until the libasynql success callback is invoked.
I use waitAll() on something else in onDisable() Is it guaranteed that all data How do I do know I'm not doing anything until libasynql success callback is invoked
waitAll() basically means "stop the world and do nothing waiting for the reply", which is doing the exact same thing as synchronous query. And you should not do that unless the server is starting/stopping. Just check if the data are set before accessing it? That really depends on your case.