【发布时间】:2017-12-16 09:33:57
【问题描述】:
我有这个代码:
var services = ['EC2', 'S3', 'RDS', 'IAM']
var promises = [];
for(var i = 0; i < services.length; i++) {
var promise = awsStatus('us-east-1', services[i])
promises.push(promise);
console.log(promises);
}
q.all(promises).then(function(data){
console.log(promises);
});
它应该使用awsStatus 方法在services 数组上循环。问题是有时我得到了我想要的所有结果:
{ service: 'IAM', status: 0 }
{ service: 'EC2', status: 0 }
{ service: 'RDS', status: 0 }
但有时我会得到不完整的结果。我以为在awsStatus 之后我需要.then 但这也没有解决这个问题。这段代码还有什么问题?
既然有评论,我也试过这个:
var services = ['EC2', 'S3', 'RDS', 'IAM']
var promises = [];
for(var i = 0; i < services.length; i++) {
var promise = awsStatus('us-east-1', services[i]).then(function(promise){
promises.push(promise);
//console.log(promises);
});
}
q.all(promises).then(function(data){
console.log(promises);
});
它会产生相同的结果。
【问题讨论】:
-
awsStatus('us-east-1', item).then(function(promise) { promises.push(promise); })并确保awsStatus这应该返回承诺 -
我也尝试过,但仍然得到相同的结果。
-
然后试试这个异步库 (github.com/caolan/async)。它提供了非常直观的方式来处理这样的异步情况
-
我不会再添加另一个外部库 - 这是一个应该很容易解决的简单案例。但是,我不完全确定您要做什么 - 记录 Promise 数组只会显示 Promise 对象,而不是它们的结果。你能澄清一下吗?
-
我觉得这也很简单。不知道为什么它不起作用。我正在尝试为服务数组中的每个元素运行 awsStatus,等待所有结果并显示它们。
标签: javascript node.js promise q