您應該會在一個包裹你的代碼IIFE使您的變量持續存在。
for (var i = 1; i <= 5; i++) {
(function(i) {
lib.request({
path: '/channels/staffpicks/videos',
query: {
page: i,
per_page: 50
}
}, function (error, body, status_code, headers) {
if (error) {
console.log('error');
console.log(error);
} else {
var totalbody = body.total;
console.log('page: ' + i);
}
});
})(i);
}
「問題」與您當前的代碼是傳遞到請求()回調不發射瞬間,因此當它被調用時,它得到了「目前我」,這是6
有兩個簡單的解決方案可以按順序請求回調。
第一種解決方案 - 相互調用請求。
(function request(i) {
lib.request({
path: '/channels/staffpicks/videos',
query: {
page: i,
per_page: 50
}
}, function (error, body, status_code, headers) {
if (error) {
console.log('error');
console.log(error);
} else {
var totalbody = body.total;
console.log('page: ' + i);
}
request(++i);
});
})(0);
第二個 - 更高級一點,但也是一個更好的,因爲請求是在同一時間進行的。
var amount = 5,
fetched = 0,
results = new Array(amount);
for (var i = 1; i <= amount; i++) {
(function(i) {
lib.request({
path: '/channels/staffpicks/videos',
query: {
page: i,
per_page: 50
}
}, function (error, body, status_code, headers) {
fetched++;
if (error) {
console.log('error');
console.log(error);
results[i] = "error";
} else {
results[i] = body;
var totalbody = body.total;
}
if (fetched === amount) {
results.forEach(function(body, n) {
console.log('page: ' + n);
});
}
});
})(i);
}
雖然有更好的解決方案,但它們有點複雜。
[JavaScript閉合內循環 - 簡單實用示例]可能的重複(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –