我无法理解如何在该呼叫的回调函数中引入一个在Fb.api调用之外设置的变量。变量photoid
设置在for
循环内,然后在for
循环内部,我使用更改photoid
进行FB.api调用。 (我甚至使用photoid
构建调用,您将看到)。这部分一切都很好,但我在我的控制台中注意到photoid
没有被传递到该回调函数中,因此我试图保存所有与之前设置相匹配的photoid变量(taggedpersonid = specialfriendvar
)。
我认为解决方案与闭包(可能)有关,但我不太了解它们,并希望得到一些帮助。如何在回调函数中获取每个photoid
变量,这样如果匹配为真,它将成功保存到我的photosbasket
数组中?
function proceedToResult() {
FB.api('/me', function(response) {
var fbid = response.id;
var profile_name_beta = response.name;
console.log(profile_name_beta);
FB.api('/me/photos', {
fields: ['id'],
limit: 200
},
function(response) {
console.log(response);
if (response && !response.error) {
if (response.data.length > 0) {
for (var i = 0; i < response.data.length; i++) {
var photoid = response.data[i].id;
console.log(photoid);
FB.api('' + photoid + '/tags', function(response) {
console.log(response);
console.log("inside photoid is" + photoid);
for (var l = 0; l < response.data.length; l++) {
var taggedpersonid = response.data[l].id;
if (taggedpersonid == specialfriendvar) { // if photo has tagged same as chosen friend
photosbasket.push(photoid);
console.log(photosbasket);
}
}
});
}
}
}
}
);
});
}
&#13;
答案 0 :(得分:0)
你可以创建另一个函数,它将变量范围扩展到该函数并使你的代码更具可读性:
function proceedToResult() {
FB.api('/me', function(response) {
var fbid = response.id;
var profile_name_beta = response.name;
console.log(profile_name_beta);
FB.api('/me/photos', {
fields: ['id'],
limit: 200
},
function(response) {
console.log(response);
if (response && !response.error) {
if (response.data.length > 0) {
for (var i = 0; i < response.data.length; i++) {
var photoid = response.data[i].id;
console.log(photoid);
getPhoto(photoid);
}
}
}
}
);
});
}
function getPhoto(photoid) {
FB.api('' + photoid + '/tags', function(response) {
console.log(response);
console.log("inside photoid is" + photoid);
for (var l = 0; l < response.data.length; l++) {
var taggedpersonid = response.data[l].id;
if (taggedpersonid == specialfriendvar) { // if photo has tagged same as chosen friend
photosbasket.push(photoid);
console.log(photosbasket);
}
}
});
}