首页 > 解决方案 > 尝试使用 promise.all 和 forEach 在 javascript 中获取多个 api

问题描述

async function someFunction() {
  try {
    await Promise.all([
      trendingsSlide.forEach((val) => {
        axios(
          `https://api.themoviedb.org/3/movie/${val}?api_key=${api}`
        );
      }),
    ]).then((val) => {
      console.log(val);
    });
  } catch (err) {
    console.log(err);
  }
}
someFunction();

为什么响应未定义,我尝试了很多来解决问题但它不起作用

标签: javascript

解决方案


因为forEach返回未定义。您想要map,并且还从回调中返回承诺axios(您可以使用简洁的箭头函数而不是带有{}主体的函数隐式地执行此操作):

async function someFunction() {
  try {
    await Promise.all(
      trendingsSlide.map((val) => 
        axios(
          `https://api.themoviedb.org/3/movie/${val}?api_key=${api}`
        )
      )
    ).then((val) => {
      console.log(val);
    });
  } catch (err) {
    console.log(err);
  }
}
someFunction();

async您可以通过使用以下函数使其更具可读性(无论如何对我来说)map

async function someFunction() {
  try {
    await Promise.all([
      trendingsSlide.map(async (val) => {
        const val = await axios(
          `https://api.themoviedb.org/3/movie/${val}?api_key=${api}`
        );
        console.log(val);
    });
  } catch (err) {
    console.log(err);
  }
}
someFunction();

推荐阅读