繁体   English   中英

使用嵌套异步等待 function 调用

[英]Using nested async await function calls

我有一个非常简单的代码,我正在尝试调试。 我有一个async function:

async function updateResult(event){

  let result = db.fetchResult(event.ProcessId);
  return result;

}

我从另一个简单的async function 调用它:

exports.processEvent = async (event) => {
  try {

    let promises = [];


    const controls = await db.fetchControls(event.EventCode);
    
    if (controls) {     
      
       promises = controls.map((control) => {
         console.log(control);
         control.map(x => this.updateResult(event));
        
       });
           
     }

    return Promise.allSettled(promises);
  }
  catch (err) {
    console.error(err);
  }
};

问题是在exports.processEvent中, db.fetchControls(event.EventCode)的内容被执行到完成(一些逻辑和一个 db getItem 调用)。

但是通过this.updateResult(x.Id, x.Version, event)调用db.fetchResult(event.ProcessId) ) 并没有完成执行fetchResult任务(一些其他逻辑 db GET 调用)。

我觉得fetchResult过早返回。 我究竟做错了什么?

.map()不是承诺感知的。 它不会等待回调中的任何承诺完成。 所以,在这段代码中:

control.map(x => this.updateResult(x.Id, x.Version, event)); 

它只是遍历整个数组,忽略返回的所有承诺,因此没有等待这些承诺。

您可以通过将这些承诺返回到更高级别的.map()来解决此问题,然后您正在等待Promise.all()

  promises = controls.map((control) => {
     console.log(control);
     return Promise.all(control.map(x => this.updateResult(x.Id, x.Version, event)));
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM