javascript - 嵌套 Promise 未推送到数组

标签 javascript arrays express es6-promise request-promise

我在 Express API 上有一条路线,该路线请求艺术家详细信息,此响应包含该艺术家的一系列版本。

目前我想映射该数组,提取一个 url,然后对该 url 进行 API 调用。我得到的响应,我想我需要插入一个数组,以便该数组最终可以作为我的响应返回。 (这是前端的后端)

但是,当我通过控制台记录数组时,它是空的。

我正在 npm 上使用 request-promise 库。

这是正确的吗?我想我需要以某种方式确保所有 promise 都得到解决,然后再继续执行,但我不确定如何?

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))
});

关于javascript - 嵌套 Promise 未推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45117549/

相关文章:

javascript - ListView 更新,jQueryMoble

javascript - CYTOSCAPE JS dijkstra 算法与预设布局

javascript - 了解 RxJS 去抖语义

java - 用于检查 char 数组是否包含 Java 中用户给定字母的 If 语句

javascript - 嵌套数组的访问长度

javascript - ExpressJS 和客户端中的 i18next 模块

JavaScript 序列化图像(图标)

javascript - 在 localStorage 中推送对象

node.js - 如何将 404 错误重定向到 ExpressJS 中的页面?

node.js - NodeJs Express 发送 403 并渲染