2016-03-31 22 views
0

Ich versuche checkLoginStatus Funktion in getUserAlbum Funktion aufzurufen, in dem getUserAlbum ich fangen die Antwort Rückkehr von checkLoginStatus und im Namen dieser Antwort muss ich unter der getUserAlbum Funktion arbeiten.Aufruf einer Funktion in einer anderen JavaScript-Funktion synchron

Aber das Problem ist, dass getUserAlbum Funktion nicht auf die Antwort warten und die nächste Zeile ausführen, die ich nicht möchte.

Hier sind meine Funktionen:

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"); 
     } 
    } 

Jemand kann mir bitte helfen, dieses Problem zu lösen.

+0

'FB.getLoginStatus' asynchron ist ... Verwenden' callbacks' – Rayon

+0

können Sie mir bitte sagen, wie Rückrufe verwenden –

Antwort

2

FB.getLoginStatus asynchron ... Verwenden callbacks als response von FB api wird asynchron sein. Sie können nicht sicher sein, wann es empfangen wird.

Ihre Funktion wird ausgeführt und die Steuerung zurückgeführt wird, bevor die response empfangen wird daher wird es undefined sein.

In callbacks übergeben Sie function als Argument wird später im Programm bei Bedarf ausgeführt werden.

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

Vielen Dank es funktioniert, und ich verstehe jetzt, dass das, was war Das Thema. Danke für die Erklärung. –

Verwandte Themen