当尝试一个接一个地获取多个firebase引用时,只会调用最后一个请求回调。
下面我试图为不同的数据获取3个firebase引用
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');
} );
我正在看这样的日志
验证用户
验证消息
验证电子邮件
电子邮件的身份验证回调
然而,我期望在身份验证上一个接一个地获得所有3个回调,所以我希望看到像
这样的日志验证用户
验证消息
验证电子邮件
用户的身份验证回调
消息的身份验证回调
电子邮件的身份验证回调
我在这里遗漏了什么导致这种情况发生的原因?
我希望以这样一种方式实现它,即所有回调都会在身份验证时触发,而不会遗漏任何回调。
我在这里创建了一个示例http://jsfiddle.net/aniruddhbk/rvkz9mrt/4/
答案 0 :(得分:1)
由于身份验证是异步发生的,因此这些调用不会在之后执行,而是主要并行执行。当您启动新的身份验证调用时,它会自动取消现有的身份验证调用。如果不了解您的用例,可以在其自己的上下文/会话中启动每个Firebase,方法是在创建Firebase
引用时传入一个额外的(未记录的)参数:
console.log('authenticating Users');
var firebaseRef1 = new Firebase('https://stckflw.firebaseio.com/Users', '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', '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', 'Emails');
firebaseRef3.authWithCustomToken('<token>',function(error, authData){
console.log('authentication callback for Emails');
} );
这将允许每个呼叫完成,并在一个Firebase客户端中为您提供三个并发的经过身份验证的会话。
authenticating Users
authenticating Messages
authenticating Emails
authentication callback for Users
authentication callback for Messages
authentication callback for Emails
正如Kato所说:不这样做可能会更好,并找到一种方法将所有三个会话的权限合并为一个令牌/会话。