2016-03-31 7 views
0

私は​​に私がcheckLoginStatusにより、応答リターンをキャッチし、私は​​機能の下で作業する必要があるという応答を代表しています、​​機能でcheckLoginStatus関数を呼び出すしようとしています。コール別のjavascript関数内の関数同期

しかし、この問題は、​​関数が応答を待っておらず、次の行を実行したくないということです。ここで

は私の機能である:

var accessToken = ''; 

    checkLoginStatus = function() { 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
       accessToken = response.authResponse.accessToken; 
       console.log(accessToken + ' => in check login status'); 
       return accessToken; 
      } else { 
       return false; 
      } 
     }); 
    } 

    getUserAlbum = function() { 
     var token = checkLoginStatus(); 
     console.log(token + ' => in get album function'); // it log undefined here that is why else part executes. 
     if(token) { 
      FB.api(
       "/me/albums/", {'accessToken': token}, 
       function (response) { 
        if (response && !response.error) { 
        console.log(response); 
        } 
       } 
      ); 
     } else { 
      alert("You are not logged in"); 
     } 
    } 

誰かがこの問題を解決するために私を助けてくださいすることができます。

+0

'FB.getLoginStatus'が非同期である...使用し' callbacks' – Rayon

+0

あなたは、コールバックに –

答えて

2

FB.getLoginStatusは非同期です... FB APIからresponseとしてcallbacksを使用して、非同期になります。あなたはそれがいつ受信されるのかは分かりません。

responseが受信される前に機能が実行され、制御が返されるため、undefinedになります。

callbacksには、引数としてのfunctionを渡すと、後で必要に応じてプログラムで実行されます。

var accessToken = ''; 
 
var checkLoginStatus = function(callback) { 
 
    FB.getLoginStatus(function(response) { 
 
    if (response.status === 'connected') { 
 
     accessToken = response.authResponse.accessToken; 
 
     callback(accessToken); 
 
    } else { 
 
     callback(false); 
 
    } 
 
    }); 
 
} 
 
var getUserAlbum = function() { 
 
    checkLoginStatus(function(token) { 
 
    console.log(token + ' => in get album function'); // it log undefined here that is why else part executes. 
 
    if (token) { 
 
     FB.api(
 
     "/me/albums/", { 
 
      'accessToken': token 
 
     }, 
 
     function(response) { 
 
      if (response && !response.error) { 
 
      console.log(response); 
 
      } 
 
     } 
 
    ); 
 
    } else { 
 
     alert("You are not logged in"); 
 
    } 
 
    }); 
 
}

+0

おかげで、それは動作します大量に使用する方法を教えてくださいすることができ、そして今私は何だったことを理解します問題。説明ありがとう。 –