When trying to get multiple firebase references one after the other, only the last requests callbacks gets called.
Below I am trying to get 3 firebase references for different data
console.log('authenticating Users');
var firebaseRef1 = new Firebase('https://stckflw.firebaseio.com/Users');
firebaseRef1.authWithCustomToken('<token>',function(error, authData){
console.log('authentication callback for Users');
} );
console.log('authenticating Messages');
var firebaseRef2 = new Firebase('https://stckflw.firebaseio.com/Messages');
firebaseRef2.authWithCustomToken('<token>',function(error, authData){
console.log('authentication callback for Messages');
} );
console.log('authenticating Emails');
var firebaseRef3 = new Firebase('https://stckflw.firebaseio.com/Emails');
firebaseRef3.authWithCustomToken('<token>',function(error, authData){
console.log('authentication callback for Emails');
} );
I am seeing the log like this
authenticating Users
authenticating Messages
authenticating Emails
authentication callback for Emails
Whereas I expect to get all 3 callbacks one after another on authentication, so I expect to see logs like
authenticating Users
authenticating Messages
authenticating Emails
authentication callback for Users
authentication callback for Messages
authentication callback for Emails
Am I missing something here cause of which this happens?
I want to achieve it in such a way that all the callback gets triggered on authentication, without missing any.
I have created a example here http://jsfiddle.net/aniruddhbk/rvkz9mrt/4/
Since authentication happens asynchronously, these calls are not executing after each other, but mostly in parallel. When you start a new authentication call it automatically cancels the existing one. Without understanding much about your use-case, you can start each Firebase in its own context/session, by passing an extra (undocumented) parameter in when you create the
Firebase
reference:This will allow each call to complete and gives you three concurrent authenticated sessions in one Firebase client.
As Kato said: it is probably better to not do this and find a way to combine the permissions for all three sessions into a single token/session.