我试图做异步循环,在那里我做了一些事情,在它结束后,我写入控制台。它看起来像那样:
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);
})();
}
但是,我有什么:
档案:3
档案:http://localhost:8000/1.jpg
档案:http://localhost:8000/2.jpg
档案:http://localhost:8000/3.jpg
我想要的是什么:
文件:http://localhost:8000/1.jpg
档案:http://localhost:8000/2.jpg
档案:http://localhost:8000/3.jpg
档案:3
问题:
await
运算符不会阻止下一步?由于
答案 0 :(得分:2)
您需要确保load
函数返回Promise。 http.get
本身不会返回它所以你想要包装它(或使用基于promise的HTTP库,如fetch
等)。
简单的承诺包装器可能如下所示:
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);
}
您还需要在await load(link)
中使用loop
。