Javascript 异步循环后写入控制台
我尝试做异步循环,在这里我做了一些事情,在它结束后,我向控制台写东西。看起来是这样的:Javascript 异步循环后写入控制台,javascript,node.js,async-await,Javascript,Node.js,Async Await,我尝试做异步循环,在这里我做了一些事情,在它结束后,我向控制台写东西。看起来是这样的: const http = require('http'); async function load(link) { try{ http.get(link, response => console.log(`File: ${link}`)); }catch(e){ console.log('error'); } } async function
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个文件:
文件:
文件: 我想要的是: 文件:
文件:
文件:
档案:3 问题:
wait
操作员不阻止下一步谢谢您需要确保
load
函数返回承诺http.get本身不会返回它,所以您需要包装它(或者使用基于承诺的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);
}
您还需要在循环中使用等待加载(link)
您可以尝试等待http.get(link,response=>console.log(`File:${link}')代码>和<代码>等待加载(链接)代码>但如果我为(让arrayOfLinks的链接)等待加载(链接)
,它将不再是一个异步循环,对吗?因为有一个原因,它在幕后仍然是异步的,但从语法上讲,它是异步的,是的。