您应该会在一个包裹你的代码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) –