Javascript 努力等待循环

Javascript 努力等待循环,javascript,node.js,async-await,Javascript,Node.js,Async Await,我现在在这里有这个功能 async function checkEntry(results: any) { let ind = 0; for (let i = 0; i < results.length; i++) { const e = results[i]; await checkStuff(e); // returns void await checkOtherStuff(e); //returns void

我现在在这里有这个功能

async function checkEntry(results: any) {
    let ind = 0;
    for (let i = 0; i < results.length; i++) {
        const e = results[i];

        await checkStuff(e); // returns void
        await checkOtherStuff(e); //returns void 
        await updateStatus(e); //returns void aswell

        ind++;
        await sleep(1);
    }
}
不提供承诺接口,
wait
不会神奇地让代码等待异步任务完成

它是一种合成糖,使其更容易与承诺一起工作,需要承诺才能工作

如果像
https.get
这样的函数不提供承诺接口,那么您需要以某种方式将其转换为承诺,例如将
新承诺((解析、拒绝)=>…)
包装在其周围

const req = await new Promise((resolve, reject) => {
  https.get(result.url, async (res) => {
    if(res.statusCode == 404) console.log(result.url+' returns 404');
    resolve()
  });
  req.on("error", (e) => {
    reject(e)
  });
})
不提供承诺接口,
wait
不会神奇地让代码等待异步任务完成

它是一种合成糖,使其更容易与承诺一起工作,需要承诺才能工作

如果像
https.get
这样的函数不提供承诺接口,那么您需要以某种方式将其转换为承诺,例如将
新承诺((解析、拒绝)=>…)
包装在其周围

const req = await new Promise((resolve, reject) => {
  https.get(result.url, async (res) => {
    if(res.statusCode == 404) console.log(result.url+' returns 404');
    resolve()
  });
  req.on("error", (e) => {
    reject(e)
  });
})

如果您使用的是wait关键字,则需要在承诺中使用它

当前,
checkStuff
没有返回承诺,因此在执行回调时,您可以调整代码以解析承诺

consthttps=require('https');
函数检查(结果){
返回新承诺((解决、拒绝)=>{
const req=https.get(result.url,(res)=>{
如果(res.statusCode==404){
log(result.url+'返回404');
拒绝(res);
}否则{
决议(res);
}
});
请求开启('错误',(e)=>{
控制台错误(e);
拒绝(e);
});
}).catch((e)=>{
控制台日志(e);
});
}
回调和承诺是不同的

当一个方法接受回调时,它说,当我完成这个任务时,我将调用您选择的函数

使用承诺时,创建一个承诺对象并返回它。它将一直处于“待定”状态,直到承诺中的某些内容调用resolve或reject。您可以像这样将结果传递到resolve或reject
resolve(data)

现在,通过将此承诺分配给
async
函数中的变量,您已经解锁了
wait
关键字<代码>等待将阻止代码移动到下一行,直到承诺得到解决,因此这有助于使代码同步

异步函数main(){ const result=等待checkStuff(); /* 结果现在是处于挂起状态的承诺对象。 代码将不会继续超过前一行 直到结果变量从挂起变为已解决。 */ 控制台日志(结果); }
如果您正在使用wait关键字,则需要在承诺中使用它

当前,
checkStuff
没有返回承诺,因此在执行回调时,您可以调整代码以解析承诺

consthttps=require('https');
函数检查(结果){
返回新承诺((解决、拒绝)=>{
const req=https.get(result.url,(res)=>{
如果(res.statusCode==404){
log(result.url+'返回404');
拒绝(res);
}否则{
决议(res);
}
});
请求开启('错误',(e)=>{
控制台错误(e);
拒绝(e);
});
}).catch((e)=>{
控制台日志(e);
});
}
回调和承诺是不同的

当一个方法接受回调时,它说,当我完成这个任务时,我将调用您选择的函数

使用承诺时,创建一个承诺对象并返回它。它将一直处于“待定”状态,直到承诺中的某些内容调用resolve或reject。您可以像这样将结果传递到resolve或reject
resolve(data)

现在,通过将此承诺分配给
async
函数中的变量,您已经解锁了
wait
关键字<代码>等待将阻止代码移动到下一行,直到承诺得到解决,因此这有助于使代码同步

异步函数main(){ const result=等待checkStuff(); /* 结果现在是处于挂起状态的承诺对象。 代码将不会继续超过前一行 直到结果变量从挂起变为已解决。 */ 控制台日志(结果); }
能否显示支票功能的代码?它必须返回一个承诺才能工作。
checkStuff(e)
etc承诺吗?您需要确保,您的方法返回了承诺。我可以看到,
checkStuff
没有返回任何内容。因此我需要在checkStuff中创建一个新的承诺,然后在https.get回调中解析它?@Retosi您接受的答案的解释有点误导。您应该阅读更多关于
wait
async
如何工作的信息。我试图解释你接受的答案在评论部分有什么误导性。你能展示一下你的checkStuff函数的代码吗?它必须返回一个承诺才能工作。
checkStuff(e)
etc承诺吗?您需要确保,您的方法返回了承诺。我可以看到,
checkStuff
没有返回任何内容。因此我需要在checkStuff中创建一个新的承诺,然后在https.get回调中解析它?@Retosi您接受的答案的解释有点误导。您应该阅读更多关于
wait
async
如何工作的信息。我试着在评论部分对你接受的答案解释什么是误导性的。回答不错,只是一个小小的观察。“使您的代码同步”,。它使代码看起来像是同步的,但从技术上讲它仍然是异步的。
Result现在是处于挂起状态的Promise对象。代码将不会继续超过前一行u