2016-06-27 32 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'); 
    } 
});