【发布时间】:2018-01-02 05:46:05
【问题描述】:
假设我有一系列承诺,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 次成功的回复,但在所有的承诺都被解决或拒绝之前,我无法访问它们。
我能否将这个 Promise 数组转换为某种可迭代形式的 Observable,这样每次我得到一个成功的响应时,我就可以将它传递给我的应用程序并使用它?
【问题讨论】:
-
你想如何处理被拒绝的承诺?它们应该如何在流中表示?您预期的唯一错误是超时错误吗?
-
我不介意失去它们。我不知道他们的 API 是如何工作的——有时我会收到错误,抱怨我没有使用“正确”的标头,大多数时候我根本没有收到任何错误,只是从不解决或拒绝 Promise。通常我的请求中至少有一半会通过正确的数据及时得到解决(我可以看到使用 Chrome 开发工具),另一个则陷入困境,但我不介意 2-3 秒后他们会发生什么,只要我至少得到了几个成功的回复。