我正在尝试编写一个返回当前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调用结束前返回。
有什么想法吗?
答案 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”,但在这种情况下没有必要。