2016-01-21 96 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

相關問題