【发布时间】:2017-04-21 23:17:33
【问题描述】:
我有这个函数应该对网页发出 300 个请求(用于基准测试),但是 Promise.all 在输出空数组之前不会等待这些请求完成,有什么想法吗?
function requestLoop(){
var resultSet= [];
// options.requests = 300
// options.url = http://localhost/
for(var c=1;c<=options.requests; c++){
http.get(options.url, function(res){
// resultSet.push( { request: c, statusCode: res.statusCode});
resultSet.push(new Promise(function(res){ return { request: c, statusCode: res.statusCode}; }));
});
}
Promise.all(resultSet).then(function(){
console.log(resultSet);
});
return;
}
Promise 是 bluebird,http 是普通的 http 包
【问题讨论】:
-
您正在回调中创建承诺。当执行
Promise.all(resultSet)时,未创建任何承诺。 -
我不同意,我没有使用 AJAX,而且这个问题只涉及一个请求,我正在尝试制作多个并将结果汇总在一起。
-
http.get也返回承诺。你应该在数组中推送它! -
有没有例子说明这一点?
标签: javascript node.js promise