我有以下代码:
console.log("TEST 1");
accounts.forEach(async function(account) {
console.log("TEST 2");
try {
var data = await getReservations(account);
} catch(err) {
res.status(err.error_code).json(err);
}
console.log("TEST 3");
});
console.log("TEST 4");
运行时,控制台显示:
TEST 1
TEST 2
TEST 4
getReservations()
TEST 3
但我希望它等待 getReservations()
完成,然后再继续经过 forEach()
。我希望它输出:
TEST 1
TEST 2
getReservations()
TEST 3
TEST 4
有什么想法吗?
最佳答案
这是常规 for
循环效果更好的一次 - 下面的代码包装在 IIFE 中,因此可以使用 await
var accounts = [1, 3];
var getReservations = (account) => new Promise(resolve => setTimeout(resolve, 1000, account*2));
(async function() {
console.log("TEST 1");
for(var i = 0, l = accounts.length; i < l; i++) {
let account = accounts[i];
console.log("TEST 2");
try {
var data = await getReservations(account);
} catch(err) {
console.error(err);
}
console.log("TEST 3");
};
console.log("TEST 4", data); // data should be 6
})();
NOTE: anything AFTER the IIFE will not "await"
关于javascript - 如何使用 async/await 同步而不是异步触发 forEach() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43533862/