Javascript 如何先从firebase获取结果,然后重定向到另一个页面?

Javascript 如何先从firebase获取结果,然后重定向到另一个页面?,javascript,jquery,firebase,Javascript,Jquery,Firebase,我的应用程序中有一个函数可以从firebase获取一些数据,在firebase on函数完成后,我需要将其重定向到另一个页面。 但在我的代码中,当我按下按钮时,它会快速重定向到另一个bage,因此该函数不会被处理。我该怎么做 $('#pg-myb-inde #testBtn').on('click',function(){ myFirebaseRef.orderByChild('emailid').equalTo('mishan@gmail.com').on('value'

我的应用程序中有一个函数可以从firebase获取一些数据,在firebase on函数完成后,我需要将其重定向到另一个页面。 但在我的代码中,当我按下按钮时,它会快速重定向到另一个bage,因此该函数不会被处理。我该怎么做

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

         myFirebaseRef.orderByChild('emailid').equalTo('mishan@gmail.com').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";
    })
$('pg myb inde'testBtn')。在('click',function()上{
myFirebaseRef.orderByChild('emailid').equalTo('mishan@gmail.com“)。在('value',函数(userSnap)上{
var user=userSnap.val();
//$('#UserPage.person name').empty();
//$('#UserPage.person name')。追加(''+
//''+user.fname);
console.log('added');
console.log(user.fname);
});
location.href=“/另一个网页”;
})

这就是你要找的吗

$('#pg-myb-inde #testBtn').on('click',function(){
    var query = myFirebaseRef.orderByChild('emailid').equalTo('mishan@gmail.com');
    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('mishan@gmail.com');
    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()
时,它将启动对服务器的请求。但是,由于从服务器返回响应可能需要一段时间,因此浏览器不会等待答案,而是在查询后继续使用代码。当数据从服务器返回时,您的回调将被调用。

为什么不将重定向代码放在
on('value')
回调中呢?实际上,我想要的是,如果on函数有多个迭代,我就不能将此代码放在“on”函数中。@A.WolffDo您想在('value'handler?类似于
if(user.name!='Nazil')的
处理程序中等待特定值吗
?是的,我需要那个“开”函数的值@FrankvanPuffelenThen你能帮我解决这个问题吗@FrankvanPuffelenThen这个问题的解决方案是什么?如果我需要从第一个firebase查询中得到一些结果,然后我需要根据第一个查询结果进行第二个查询?@FrankYou需要将第二个查询嵌套在第一个查询的回调中t one.
query.on('value',函数(snapshot){ref.child(snapshot.key())。on('value',…
是的,我喜欢这样做。非常感谢!