等待api调用完成,然后返回结果Nodejs

Jes*_*iga 1 javascript asynchronous node.js express

我试图多次进行一次api调用,方法是:

const myPromise = new Promise(function(resolve, reject) {
  // code here
  for (let i = 0; i < recommendedMovies.length; i++) {
    tmdb.genre.movies(
      recommendedMovies[i].id,
      randomNumber,
      (err, response) => {
        if (!err) {
          finalMovies.push(response.results);
          resolve(finalMovies)
        } else {
          reject('error')
        }
      }
    );
  }     
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我将每个调用结果推送到名为finalMovies的数组中,然后尝试按以下方式返回结果:

myPromise
  .then(function whenOk(response) {
    res.json(response)
  })
  .catch(function notOk(err) {
    console.log(err);
  });
Run Code Online (Sandbox Code Playgroud)

问题是我只在第一次调用时得到数组。

我该如何更改代码,以便可以等待myPromise完成循环然后返回数组?

谢谢!

Jon*_*lms 5

一个Promise仅解析一次,因此您需要为每个请求解析另一个Promise,然后使用Promise.all合并它们:

const promises = recommendedMovies.map(({ id }) => new Promise((resolve, reject) =>  {
  tmdb.genre.movies(id, randomNumber, (err, response) => {
    if (!err) {
      resolve(response.results);                 
    } else {
      reject('error')
    }
  });
}));

const result = Promise.all(promises);
result.then(/*...*/).catch(/*...*/);
Run Code Online (Sandbox Code Playgroud)