【问题标题】:How to get the result from firebase first and then redirect to another page?如何先从firebase获取结果然后重定向到另一个页面?
【发布时间】:2016-01-21 11:19:53
【问题描述】:

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

 $('#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";
    })

【问题讨论】:

  • 你为什么不把你的重定向代码放在on('value'...)回调中?
  • 实际上我想要的是如果 on 函数有多个迭代,我不能将此代码放在“on”函数中。 @A.沃尔夫
  • 您要等待on('value' 处理程序中的特定值吗? if (user.name != 'Nazil') 之类的东西?
  • 是的,我需要一个来自“on”函数的值
  • 你能帮我解决这个问题吗@FrankvanPuffelen

标签: javascript jquery firebase


【解决方案1】:

这就是你要找的吗?

$('#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() 时,它会启动对服务器的请求。但由于可能需要一段时间才能从服务器返回响应,因此您的浏览器不会等待答案,而是继续执行查询后的代码。当数据从服务器返回时,将调用您的回调。

【讨论】:

  • 那有什么解决办法呢?如果我需要从第一个 firebase 查询中获得一些结果,然后我需要根据第一个查询结果进行第二个查询? @弗兰克
  • 您需要将第二个查询嵌套在第一个查询的回调中。 query.on('value', function(snapshot) { ref.child(snapshot.key()).on('value', ...
  • 是的,我确实喜欢。非常感谢!
猜你喜欢
  • 2014-02-22
  • 2011-06-02
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多