2016-06-27 34 views
0

嗨,我正在使用React在我的網站上實現FB登錄流。當按鈕被點擊時,它會調用一個啓動登錄流程的外部JS文件。我的問題是我需要傳回true/false來查看它們是否成功登錄並呈現反應組件,但JS函數立即返回undefined或false,而不是等待FB Api調用。該功能看起來像這樣Javascript函數不等待FB Api返回前評估

login: function(){ 
console.log('login'); 
FB.login(function(response){ 
    if(response.authResponse){ 
    return(externalScriptThatImIn.checkLoginStateStarter()); 
    } 
},{scope:"public_profile,email"}); 
}, 

然後調用的函數返回另一個函數,最終進入返回true或false根據他們是否得到了登錄,但即使我說返回true;在FB.login調用中,它不會等待它在返回之前進行評估,而只是返回undefined。無論如何強迫它等待?

+1

http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call/14220323# 14220323 – Teemu

回答

0

您可以使用回調傳遞迴調和返回值。

login: function(cb) { 
    console.log('login'); 
    FB.login(function(response) { 
     if (response.authResponse) { 
     return cb(externalScriptThatImIn.checkLoginStateStarter()); 
     } 
    }, { 
     scope: "public_profile,email" 
    }); 
    } 

你可以這樣調用它

login(function(status){ 
    if (status){ 
     console.log('Logged in'); 
    } 
});