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))
我正在创建一个简单的电影讨论论坛。用户有一个配置文件,他们可以在其中输入他们最喜欢的电影,并用逗号分隔。后端路由调用 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))