【问题标题】:How do you return an object from a loop only once the data is ready? [duplicate]仅在数据准备好后如何从循环中返回对象? [复制]
【发布时间】:2022-11-05 16:04:05
【问题描述】:

我是异步函数的新手。我试图返回对象 name_dates,但是当我将它记录到控制台时,它只返回一个空对象。

这是我的代码:

async findAllScribesWithProfileName() {

...


let name: string;
let dates: Date[];

type NameDates = { display_name: string; created: Date[] };
const name_dates = <NameDates[]>{};


 owners.forEach(async (owner, ownerIdx) => {
    name = (await this.profileService.getById(owner)).display_name;
    dates = scribes
      .filter((scribe) => scribe.owner == owner)
      .map((s) => s.created);

    name_dates[ownerIdx] = {
       display_name: name,
       created: dates,
     };
  });

 return name_dates;
}

我试图在owners.forEach 循环中移动 return 语句,但这并没有产生我期望的结果。

【问题讨论】:

    标签: typescript asynchronous async-await promise


    【解决方案1】:

    您可以使用 Promise.all 并映射数组,以便您可以等待所有这些都立即完成(并行):

    await Promise.all(
      owners.map(async (owner, ownerIdx) => {
        name = (await this.profileService.getById(owner)).display_name;
        dates = scribes
          .filter((scribe) => scribe.owner == owner)
          .map((s) => s.created);
    
        name_dates[ownerIdx] = {
          display_name: name,
          created: dates,
        };
      })
    );
    
    return name_dates;
    

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 2010-11-06
      • 2017-05-26
      • 2019-10-13
      • 2012-06-26
      • 2020-03-12
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多