[英]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.