【发布时间】:2014-10-08 11:04:06
【问题描述】:
我正在尝试执行多个异步请求并尝试使用 Promise 获取输出。
如果我有多个请求排队,Q.all(promises).then () 函数似乎不起作用。对于单个请求,所有承诺都已解决。示例代码在这里。
var request = require('request');
var Q = require('q');
var sites = ['http://www.google.com', 'http://www.example.com', 'http://www.yahoo.com'];
// var sites = ['http://www.google.com']
var promises = [];
for (site in sites) {
var deferred = Q.defer();
promises.push(deferred.promise);
options = {url: sites[site]};
request(options, function (error, msg, body) {
if (error) {
deferred.reject();
}
deferred.resolve();
});
}
Q.all(promises).then (function () {
console.log('All Done');
});
我在这里做错了什么?
苏利亚
【问题讨论】:
-
您需要提供更多详细信息 - 运行上述代码时究竟会发生什么?
-
"我在这里做错了什么?" - 使用(隐式)全局
site和options变量。使用for inenumeration on arrays。此外,它失败的原因:您的deferred将被后续调用覆盖,您的回调不是对它的闭包 - 它总是尝试解决单个最后一个deferred。
标签: javascript node.js promise q