我遇到了在for循环中运行FB.api的问题。
for(var i = 0; i < commentObjectLength; i++){
var fbFeedID = commentObject.OwnCommentList[i].fbFeedID;
var OwnCommentID = commentObject.OwnCommentList[i].OwnCommentID;
var accessToken = commentObject.OwnCommentList[i].accessToken;
var commentText = commentObject.OwnCommentList[i].commentText;
alert("Hiii"); // >>>>>>>1
FB.api('/' + fbFeedID + '/comments', 'post', {
message: commentText,
access_token : accessToken
}, function (response) {
if (!response || response.error){
//alert(response.error.message);
} else {
alert("Hello"); // >>>>>>>2
alert(response.id); // >>>>>>>3
}
});
}
现在以简单的方式讲述。
我期待像警告一样警惕
1→ HIII
2→你好
3→一些回复id
4-&GT; HIII
5→你好
6-&GT;一些共鸣id
但实际上我会像中国人一样出局
1→ HIII
2→ HIII
3→ Hiii
继续直到循环大小
8-&GT;你好
9-&GT;一些回复id
10→你好
11-&GT;一些响应ID继续
问题是循环的最后日期将一直转到Facebook并对Feed进行评论。不是单独的。
所以请任何人帮我解决这个问题。我苦苦挣扎。
(希望每个人都能理解问题,需要任何额外的信息,请询问)
答案 0 :(得分:0)
FB。*是基于事件的,有一些技巧可以让它更加同步,但它不会起作用。你需要链接你的函数调用。
for(var i = 0; i < commentObjectLength; i++){
var fbFeedID = commentObject.OwnCommentList[i].fbFeedID;
var OwnCommentID = commentObject.OwnCommentList[i].OwnCommentID;
var accessToken = commentObject.OwnCommentList[i].accessToken;
var commentText = commentObject.OwnCommentList[i].commentText;
FB.api('/' + fbFeedID + '/comments','post',{
message: commentText,
access_token : accessToken
}, function (response) {
alert("Hiii"); // >>>>>>>1
if (!response || response.error){
//alert(response.error.message);
} else {
alert("Hello");// >>>>>>>2
alert(response.id); // >>>>>>>3
}
});
}
答案 1 :(得分:0)
你需要更进一步学习Closures它将为你提供适当的解决方案。
闭包为您提供了一种方法,可以将所有变量值保存在自己的函数调用中,这就是为什么当FB.api将返回带有响应的代码时,所有局部变量在调用FB.api时将具有相同的值。我相信这会解决你的问题。