2016-01-21 40 views
-1

我在我的应用程序中有一个函数来从firebase获取一些数据,并且在完成该firebase功能之后,我需要将其重定向到另一个页面。 但在我的代码中,当我按下按钮时,它会很快重定向到另一个袋子,所以不处理该功能。我怎样才能做到这一点?如何先从firebase中获取结果,然后重定向到其他页面?

$('#pg-myb-inde #testBtn').on('click',function(){ 

     myFirebaseRef.orderByChild('emailid').equalTo('[email protected]').on('value',function(userSnap){ 
      var user=userSnap.val(); 
//   $('#UserPage .person-name').empty(); 
//   $('#UserPage .person-name').append('' + 
//    '<i class="glyphicon glyphicon-th-list"></i> '+user.fname); 
      console.log('appended'); 
      console.log(user.fname); 


     }); 

     location.href = "/another-web-page"; 
    }) 
+2

为什么你不把你的重定向代码放在'on('value'...)'回调中? –

+0

实际上我想要的是,如果on函数有多个迭代,我不能把这个代码放在'on'函数中。 @ A. Wolff – Nazil

+0

你想在'on('value''处理程序中等待一个特定的值吗?像'if(user.name!='Nazil')'' –

回答

0

这是你要找的吗?

$('#pg-myb-inde #testBtn').on('click',function(){ 
    var query = myFirebaseRef.orderByChild('emailid').equalTo('[email protected]'); 
    query.on('value',function(userSnap){ 
     var user=userSnap.val(); 
     location.href = "/another-web-page"; 
    }); 
}) 

我唯一改变的是移动位置的设置为回调函数。

如果这确实是你在找什么,它可能如果你把一些记录语句到这个代码帮助:

$('#pg-myb-inde #testBtn').on('click',function(){ 
    var query = myFirebaseRef.orderByChild('emailid').equalTo('[email protected]'); 
    console.log('Before Firebase query'); 
    query.on('value',function(userSnap){ 
     console.log('In Firebase callback'); 
     var user=userSnap.val(); 
     location.href = "/another-web-page"; 
    }); 
    console.log('After Firebase query'); 
}) 

现在,当你运行该代码时,输​​出是最有可能您的预期:

Before Firebase query 
After Firebase query 
In Firebase callback 

原因是数据是从Firebase异步检索的。当您拨打on()时,它会向服务器发起请求。但是,由于在服务器返回响应之前可能需要一段时间,因此您的浏览器不会等待答案,只需在之后的代码查询即可。当数据从服务器返回时,您的回调被调用。

+0

然后这个解决方案是什么?如果我需要从第一个firebase查询中得到一些结果,然后我需要根据第一个查询结果进行第二个查询?@Frank – Nazil

+0

你需要在第一个查询的回调函数中嵌套第二个查询语句。'query.on('value',function(snapshot){ref.child(snapshot.key())。on('value ',...' –

+0

是的,我喜欢这样,非常感谢! – Nazil

相关问题