如何将一个Promises数组转换为一个流(Observables?)

时间:2018-01-02 05:46:05

标签: promise rxjs

假设我有一系列承诺,itemsPromises。其中一些会失败,其中一半可能会成功。

如果我试图得到这样的答案:

const itemsPromises = raw.map(item =>
            axios({
                method:'get',
                url:`https://www.omdbapi.com/?apikey=${apikey}&i=${item.imdbID}`
            })
        )

const itemsResponses = await Promise.all(itemsPromises)

......我需要等待很长时间,直到失败的承诺超时,最终。我可能会得到5-6次成功的回复,但无法访问它们,直到所有的承诺得到解决或拒绝。

我可以将这个Promises数组转换为一些可迭代的Observable形式,这样每次我得到一个成功的响应,我都可以将它传递给我的应用程序并使用它吗?

1 个答案:

答案 0 :(得分:3)

合并运算符允许您同时执行每个http调用

Rx.Observable.merge(null,
raw.map(item =>
    Rx.Observable.fromPromise(axios({
        method: 'get',
        url: `https://www.omdbapi.com/?apikey=b54e8554&i=${item.imdbID}`
    })).catch(err=>Rx.Observable.of({err,item}))
)).subscribe()