gpt4 book ai didi

javascript - Facebook API、Javascript SDK 和可变范围

转载 作者:行者123 更新时间:2023-11-29 10:23:36 24 4
gpt4 key购买 nike

这段代码有一个变量范围的问题:

var likesString = "";

var getLikes = function() {
friend_ids = ["me", "123456789", "0987654321"];
likesString = "";

var likesArray = new Array();
var i = 0;
for (i = 0; i < friend_ids.length; i++) {
FB.api('/'+ friend_ids[i] +'/likes', function(response) {
var tmpLikesString = "";
if (response.data) {
likes = response.data;
var j = 0;
for (j = 0; j < likes.length; j++) {
if (likes[j]["category"] == "Movie") {
tmpLikesString = likes[j]["id"];
}
}
} else {
console.log("Error looking for likes");
}
likesArray.push(tmpLikesString);
console.log('In FB.api:'+ likesArray);
});
console.log('Out FB.api:'+ likesArray);
}
likesString = likesArray.join(',');
console.log("likes : " + likesString);
};

在 FB.api 中,我的 var “likesArray” 可以工作,但是当我离开它时,它就像什么都没发生一样......

输出是否有助于理解:

In FB.api:
In FB.api:,
In FB.api:,,
In FB.api:,,,208509052512525
In FB.api:,,,208509052512525,
In FB.api:,,,208509052512525,,153960391321494
(3)Out FB.api:
likes :

谢谢。

最佳答案

我认为您没有范围问题,我认为您有时间问题。

我希望 FB.api 调用是异步,对吗? (我没有做过任何 Facebook 编程。)这意味着 FB.api 调用之后的代码将在您提供的回调中运行 before 代码 FB.api。但是您在调用后的代码中使用了 likesArray,此时它仍然是空的。

就像这样做:

var a = 1;
setTimeout(function() {
a = 2;
}, 10);
alert(a); // alerts "1"

...因为那也是异步的。您需要更改您的逻辑,以便在 FB.api 调用 之后调用您当前在 getLikes 函数中的代码FB.api 函数调用您的回调。

为了清楚起见,再次使用简化示例,基本上,相当于移动 alert:

var a = 1;
setTimeout(function() {
a = 2;
alert(a); // alerts "2"
}, 10);

关于javascript - Facebook API、Javascript SDK 和可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com