Родитель с детьми как обещания - PullRequest
0 голосов
/ 08 июля 2019

Я хочу получить дочерние записи для каждого родителя.

Изначально у меня был код для извлечения массива родительских записей:

  public get() {
    return this.db.any(sql.get);
  }

И после, для каждой родительской записи нужно извлекать дочерние записи. Итак, код становится:

  public get() {
    return this.db.task("get-parents", async (t) => {
      const parents = await t.any(sql.get);

      for(var i = 0; i < parents.length; i++) {
        parents[i].children = await t.any(sqlProvider.children.get, { id: parents[i].id });
      }

      return paytypes;
    });
  }

Хотите достичь того же или оптимизировать с помощью карты

  public get() {
    return this.db.task("get-parents", async (t) => {
      const parents = await t.any(sql.get);

      const p = await Promise.all(parents.map((p: any) => t.any(sqlProvider.children.get, { id: p.id })));
      p.map((v: any, ind: number) => parents[ind].children = v );

      return parents;
    });
  }

Но мне не нравятся два вызова функции map в последнем решении.

Есть ли лучший / более короткий способ выполнения дочернего параллельного запроса? Может быть, с помощью task.batch или ...?

...