嵌套的承诺不推送到数组
Nested Promise not pushing to array
我在 Express API 上有一条路线,请求艺术家的详细信息,此响应包含该艺术家的一系列发行。
目前我想映射到那个数组,提取一个 url 然后对那个 url 进行 API 调用。我得到的响应是,我想我需要推入一个数组,以便该数组最终可以作为我的响应返回。 (这是前端的后端)
然而,当我控制台记录我的数组时,它是空的。
我在 npm 上使用请求承诺库。
这是正确的吗?我想我需要以某种方式确保在继续执行之前解决所有承诺,但我不确定如何做?
route.get('/search', (req, res) => {
const artist = req.query.artist || '';
let releases = [];
rp.get(`https://api.discogs.com/database/search?artist=${artist}&type=release&format=Vinyl&per_page=5&page=1`)
.then(({results}) => results.map(({resource_url}) => resource_url))
.then((resource_urls) => resource_urls.map((resource_url) => rp.get(resource_url).then((release) => releases.push(release))))
.then(() => console.log(releases))
.catch((err) => console.log(err))
});
您可以在链中使用 Promise.all
而不是使用之前声明的 releases
变量:
route.get('/search', (req, res) => {
const artist = req.query.artist || '';
rp.get(`https://api.discogs.com/database/search?artist=${artist}&type=release&format=Vinyl&per_page=5&page=1`)
.then(({results}) => results.map(({resource_url}) => resource_url))
.then((resource_urls) => Promise.all(resource_urls.map((resource_url) => rp.get(resource_url)))
.then((releases) => console.log(releases))
.catch((err) => console.log(err))
});
我在 Express API 上有一条路线,请求艺术家的详细信息,此响应包含该艺术家的一系列发行。
目前我想映射到那个数组,提取一个 url 然后对那个 url 进行 API 调用。我得到的响应是,我想我需要推入一个数组,以便该数组最终可以作为我的响应返回。 (这是前端的后端)
然而,当我控制台记录我的数组时,它是空的。
我在 npm 上使用请求承诺库。
这是正确的吗?我想我需要以某种方式确保在继续执行之前解决所有承诺,但我不确定如何做?
route.get('/search', (req, res) => {
const artist = req.query.artist || '';
let releases = [];
rp.get(`https://api.discogs.com/database/search?artist=${artist}&type=release&format=Vinyl&per_page=5&page=1`)
.then(({results}) => results.map(({resource_url}) => resource_url))
.then((resource_urls) => resource_urls.map((resource_url) => rp.get(resource_url).then((release) => releases.push(release))))
.then(() => console.log(releases))
.catch((err) => console.log(err))
});
您可以在链中使用 Promise.all
而不是使用之前声明的 releases
变量:
route.get('/search', (req, res) => {
const artist = req.query.artist || '';
rp.get(`https://api.discogs.com/database/search?artist=${artist}&type=release&format=Vinyl&per_page=5&page=1`)
.then(({results}) => results.map(({resource_url}) => resource_url))
.then((resource_urls) => Promise.all(resource_urls.map((resource_url) => rp.get(resource_url)))
.then((releases) => console.log(releases))
.catch((err) => console.log(err))
});