簡體   English   中英

嵌套的承諾不推向數組

[英]Nested Promise not pushing to array

我在Express API上有一條路線,要求提供藝術家的詳細信息,此響應包含該藝術家的一系列發行版本。

目前,我想映射到該數組,提取一個URL,然后對該URL進行API調用。 我得到的響應,我想我需要放入一個數組中,以便最終可以將該數組作為我的響應返回。 (這是前端的后端)

但是,當我用控制台記錄陣列時,它為空。

我在npm上使用了request-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))
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM