【JavaScript】mapの中で非同期関数を呼ぶ
 Author: 水卜

結論

await Promise.all(
  array.map((i) => {
    return await api.call(i)
  })
);

こんな感じでPromise.all()で囲むと全部取れます。

実装例

const mapCategoryId = [
        { slug: 'web', id: 'hoge' },
        { slug: 'iot', id: 'hoge' },
        { slug: 'mobility', id: 'hoge' },
        { slug: 'cloud', id: 'hoge' },
        { slug: 'other', id: 'hoge' },
];
const categoriesPages = _.flattenDeep(
  await Promise.all(
    mapCategoryId.map(async (map) => {
      const count = await api.getPosts(0, 1, {'fields.mainCategory.sys.id': map.id})
      .then((data) => data.total)
      return paginate.getPagesAsStrList(count, `/category/${map.slug}`);
    })
  )
);

ブログのカテゴリとIDの組に対して、それに紐づく投稿数を取得し、ページネーションしたURLを返す。

このブログはNuxtの静的サイトジェネレータで吐き出したものをホスティングしているので、こんな処理が必要だったりします。