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完成循环然后返回数组?
谢谢!
一个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)
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |