首页 > 解决方案 > 在 forEach 完成之前返回的数据

问题描述

我正在从包含来自其他来源的同一项目的 ID 的 API 检索数据。我想遍历每个项目并使用此 ID 执行另一个 API 调用来获取和设置其他信息。但是,promise 返回的值仅包括来自第一个 API 调用的数据,而不包括我需要的其他数据。

这是代码:

const fetch = require('node-fetch');

const startDate = "2021-04-29"

mergeData().then(premieres => {
  console.log(premieres);
})

async function mergeData() {
  const premieres = await getPremieres();
  premieres.forEach(async premiere => {
    if (premiere.show.ids.tmdb) {
      const data = await getShowDetails(premiere.show.ids.tmdb);
      premiere.show.tmdbData = data;
    }
  });
  // This value is being returned before the forEach is ran
  return premieres;
}

async function getPremieres() {
  const response = await fetch(`https://api.trakt.tv/calendars/all/shows/premieres/${startDate}/7?countries=us`, {
    headers: {
      "trakt-api-key": "xxx"
    }
  });
  return response.json();
}

async function getShowDetails(id) {
  const response = await fetch(`https://api.themoviedb.org/3/tv/${id}?api_key=xxx`)
  return response.json();
}

如何确保回调mergeData()包含在forEach循环中检索到的其他数据?

标签: javascriptnode.js

解决方案


推荐阅读