gpt4 book ai didi

javascript - aws方法的Node.js forEach循环

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:42 25 4
gpt4 key购买 nike

我正在尝试在 forEach 循环完成后执行代码,这是我的问题的简化版本:

var arr = { values: ['1', '2', '3', '4', '5'] };

arr.values.forEach(function (element) {
ec2.describeInstances({ InstanceIds: ['i-51ec7d83'] }, function (err, data) {
console.log(data.Reservations[0].Instances[0].Tags[0].Value);
});
});

console.log('Excecute this after.');

但是结果是:

Excecute this after.

Test1

Test1

Test1

Test1

Test1

我以为 forEach 循环是同步的,为什么会这样?我能做什么?

谢谢!

最佳答案

正如其他人已经提到的,ec2.describeInstances 是异步的。

您需要知道所有异步调用何时完成。为此,您可以使用类似 Async.js 的库.这是一个例子:

var async = require('async');
var arr = { values: ['1', '2', '3', '4', '5'] };

async.each(arr.values, function(element, callback) {
ec2.describeInstances({ InstanceIds: ['i-51ec7d83'] }, function (err, data) {
console.log(data.Reservations[0].Instances[0].Tags[0].Value);
callback(); // <-- this lets it know the async operation is complete
});
}, function() {
console.log('Excecute this after.');
});

each 方法的第三个参数是一个 done 回调,当循环中的所有异步调用都完成时将调用该回调。

关于javascript - aws方法的Node.js forEach循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com