gpt4 book ai didi

javascript - 在异步循环后写入控制台

转载 作者:行者123 更新时间:2023-11-29 21:00:01 25 4
gpt4 key购买 nike

我正在尝试执行异步循环,在其中执行某些操作并在结束后写入控制台。看起来像这样:

const http = require('http');

async function load(link)
{
try{
http.get(link, response => console.log(`File: ${link}`));
}catch(e){
console.log('error');
}
}

async function loop(arrayOfLinks)
{
for(let link of arrayOfLinks)
load(link);
}

module.exports = (arrayOfLinks) => {
(async () => {
await loop(arrayOfLinks);
console.log('Files: '+arrayOfLinks.length);
})();
}

但是,我有:

Files: 3
File: http://localhost:8000/1.jpg
File: http://localhost:8000/2.jpg
File: http://localhost:8000/3.jpg

我想要的是:

File: http://localhost:8000/1.jpg
File: http://localhost:8000/2.jpg
File: http://localhost:8000/3.jpg
Files: 3

问题:

  1. 为什么 await 运算符不阻止下一步?
  2. 我该如何解决这个问题?

谢谢

最佳答案

您需要确保 load 函数返回 Promise。 http.get 本身不会返回它,因此您想包装它(或使用基于 promise 的 HTTP 库,如 fetch 等)。

简单的 promise 包装器可能如下所示:

async function load(link) {
try {
return new Promise((resolve, reject) => {
http.get(link, resolve).on('error', reject)
})
.then(response => console.log(`File: ${link}`))
} catch (e) {
console.log('error', e.message);
}
}

async function loop(arrayOfLinks) {
for (let link of arrayOfLinks)
await load(link);
}

你还需要在loop中使用await load(link)

关于javascript - 在异步循环后写入控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058176/

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