JavaScript/Express Promise.all() 问题

JavaScript/Express Promise.all() issue

我正在创建一个简单的电影讨论论坛。用户有一个配置文件,他们可以在其中输入他们最喜欢的电影,并用逗号分隔。后端路由调用 OMDB API 和 returns JSON objects 用于将显示海报、标题和其他适用信息等详细信息的电影。

我已经使用 Express 创建了一个后端路由来获取信息。我成功地从 OMDB 获得了一部电影,并且 return 它作为 JSON object 在 Postman 上。

但是,当我尝试通过 favouriteFilms 数组进行映射时,object returned 是(或似乎)是空的。

下面的代码向“/movies”发出获取请求,接收创建的 auth JWT 中间件和异步请求、res 回调。

声明了一个配置文件变量以通过 id 获取用户的配置文件。

使用 Promise.all(),电影变量设置为映射所有 profile.favouriteFilms 数组,对于每部电影,return 来自 OMDB 请求的信息,然后 res.json(films.data)

router.get('/movies', auth, async (req, res) => {
  try {
    const profile = await Profile.findOne({ user: req.user.id });

    const films = Promise.all(
      profile.favouritefilms.map((film) =>
        axios.get(
          `http://www.omdbapi.com/?t=${film}&apikey=${config.get('OMDBkey')}`
        )
      )
    );
    res.json(films.data);
  } catch (error) {
    console.error(error.message);
    res.status(500).send('Server Error');
  }
});

如上所述,Postman 上的输出为空。

您应该通过另一个 .then() 方法处理 Promise.all 的结果。见下文:

const profile = await Profile.findOne({ user: req.user.id });

const films = Promise.all(
  profile.favouritefilms.map((film) =>
    axios.get(
      `http://www.omdbapi.com/?t=${film}&apikey=${config.get('OMDBkey')}`
    )
  )
).then(films => res.json(films.map(film => film.data))