当使用 q 时,我得到与循环次数相同的响应:
function start() {
var the_promises = [];
var api_info = config.AFV
var deferred = Q.defer();
var extPath = '/search/'
var callType = 'GET'
var mymd = buildmd5(api_info, extPath, callType);
for(var page=1;page<4;page++) {
console.log('getting page:'+page)
new Client().get(url'+page, function(data, response){
deferred.resolve(data);
});
the_promises.push(deferred.promise);
}
return Q.all(the_promises);
}
start().then(function (clips) {
inspect(clips)
});
输出: 结果页数:[ '1' ], 结果页数:[ '1' ], 结果页数:[ '1' ], 结果页数:[ '1' ],
我觉得我可能有 var deferred = Q.defer();在错误的地方,它不会保存不同的 promise 。我知道这个版本的代码不起作用,但我只关心 promise 。谢谢!
最佳答案
您需要为每个新客户创建一个新的 deferred。并将该循环体放入一个立即调用的函数中,以正确确定 var 的范围。
function start() {
var the_promises = [];
var api_info = config.AFV;
var extPath = '/search/';
var callType = 'GET';
var mymd = buildmd5(api_info, extPath, callType);
for(var page=1;page<4;page++) {
(function() {
var deferred = Q.defer();
console.log('getting page:'+page);
new Client().get('url'+page, function(data, response){
deferred.resolve(data);
});
the_promises.push(deferred.promise);
}());
}
return Q.all(the_promises);
}
start().then(function (clips) {
inspect(clips);
});
关于javascript - 在 Node 中使用 promise 循环返回相同的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172245/