繁体   English   中英

如何等待API调用完成然后返回结果?

[英]How to wait for API calls to finish and then return the result?

我试图多次进行api调用:

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(/*...*/);

如您所见,我正在尝试等待API调用完成,然后返回结果,该结果必须是数组。

我怎样才能做到这一点?

const result = Promise.all(promises);
result.then(/*...*/).catch(/*...*/);

我先得到结果,然后API调用完成,所以我只得到了一组未完成的Promise。

谢谢!

Promise.all(promises).then(results => { ... process each result });

Promise.all方法采用一组promise,并创建一个新的promise,如果所有promise都成功,则该promise会成功;如果一个promise失败,也会失败。 成功回调函数以相同的顺序接收一个成功值数组(上面的results数组),每个传入的promise 一个

在您的示例中,您将像这样处理它:

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( promisesResults => {
    /* promisesResults is an array where each element is result of promise at the same index */
    promisesResults.forEach( promiseResult => {
    /* .. process each promiseResult .. */
    };
}).catch(/*...*/);

作为参考,还有Promise.race ,它接受一组诺言并返回一个全新的诺言,一旦第一个诺言得到解决或拒绝,该诺言便会解决或拒绝。 成功的回调接收第一个已解决的Promise的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM