The methods _isEnable or _isAvailable are not good places to start loading an item asynchronously it is the same for every method that will return a result because in an asynchronous execution model we cannot have a sequential execution.

SOLUTION:

_isAvailable and _isEnable are always called after you change a selection in the CMS, for instance when you select a new item in a List or in a Tree the CME will call `toolbar.updateState(selection)`. This method will call _isAvailable and _isEnable for all the commands available including yours.

OK, how you can execute some custom logic when you select a new item in a List or in a Tree, well there are few options there, you can use a domain level javascript or my preferred way you can extend a resources group and bind a `change` event to the current list object or tree control, in that custom `change` event handler that should be executed at the end you can load your current selected item and then call `toolbar.updateState(selection)` once your item is already loaded, it will call your _isEnable and _isAvailable methods but your item will be already loaded so you will get access to all the information.

If you are looking for a sample about how to extend a resources group, check it out [Extend a resources group][1]

I hope this helps.

**UPDATE**

I have written a post about this issue with an implementation of this answer.
[Full Load an Item before _isAvailable and _isEnabled are executed][2]


  [1]: https://tridion.stackexchange.com/questions/1685/jquery-and-dependencies-for-gui-extensions/1689#1689
  [2]: http://erichuiza.blogspot.com/2013/10/ui-extensions-ensuring-item-is-full.html