Facebook API获取用户的名字

时间:2014-11-20 11:30:48

标签: facebook-javascript-sdk

我正在尝试编写一个返回当前FB用户名的简单函数。

我得到了一些奇怪的回答,所以我添加了一些位来追踪问题所在。

  function firstName(){
    var userName="Default Name";

    FB.api('/me', function(response) {
      if (!response || response.error) {
        alert('Error occured fetching first name');
        userName="Name Error";
      } else {
        userName=response.first_name;
        console.log("TestPoint1: " + userName);
      }
    });
    console.log("Test Point2: " + userName);
    return userName;
  }

但如果我使用console.log(“testCall:”+ firstName)调用它;我按此顺序得到以下回复: -

Test Point2: Default Name
TestCall: Default Name
TestPoint1: Pete

因此函数会在FB api调用结束前返回。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

欢迎来到异步编程世界:)

API调用的回调将被异步调用,因此测试点2将在FB.api之后立即被调用,但带有响应的函数将在稍后调用。

正确的解决方案(你无法使用“return”):

function firstName(callback){
    FB.api('/me', function(response) {
        if (!response || response.error) {
            callback('Name Error');
        } else {
            callback(response.first_name);
        }
    });
}
firstName(function (response) {
    console.log(response);
});

你也可以使用“Promises”,但在这种情况下没有必要。