This should probably return a promise since it's async, right? Then the callbacks they provide are triggered with the returned data or error when available or they can act on the promise elsewhere.