2013-08-27 78 views
0

我将数组传递给一个函数,如果存在“facebookValue”,则获取用户ID和访问令牌。

该函数正常工作,因为该ID可以输出到控制台...但我的问题似乎是返回值没有捕获变量,我得到了未定义。函数的返回值返回错误的值

这里是我的功能

function facebook_oAuth(arr){ 

    var checkArray = $.inArray('facebookValue', arr), 
     uid, 
     accessToken; 

    if (checkArray == -1) {} 
    else{ 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
        uid = response.authResponse.userID, 
        access_token = response.authResponse.accessToken; 
         console.log(uid + " ? " + accessToken); // ok 
      } 
      return [uid, access_token];// doesnt return the values from above 
     }); 
    } 
}; 

而且我获得这样的值,但值(UID,的accessToken)出来undefined

var myReturn = facebook_oAuth(myArray), 
    uid = myReturn[0], 
    accessToken = myReturn[1], 
    credentialsArray = [uid,accessToken]; 
+0

'UID = response.authResponse.userID,'应阅读代替'UID = response.authResponse.userID;'(分号,而不是逗号) –

+3

了解什么是异步表示。 – epascarello

+0

谢谢你们。 –

回答

1

此代码是异步的,如果你真的需要获得响应,因为facebook_oAuth返回值,您将不得不等待异步调用完成,但我不建议。 Othrwise您可以使用此代码:

function facebook_oAuth(arr,callback) { 

    var checkArray = $.inArray('facebookValue', arr), 
      uid, 
      accessToken; 

    if (checkArray == -1) { 
    } 
    else { 
     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
       uid = response.authResponse.userID, 
         access_token = response.authResponse.accessToken; 
       console.log(uid + " ? " + accessToken); // ok 
      } 
      callback([uid, access_token]); 
     }); 
    } 
} 
; 


facebook_oAuth(myArray,function(myReturn) 
{ 
    //This code is executed AFTER you retrieve FB login status 
    var uid = myReturn[0], 
    accessToken = myReturn[1], 
    credentialsArray = [uid,accessToken]; 
});