如何用rxjs解决回调地狱
当下一个请求依赖于前一个请求的响应时,原生js会遇到callback hell的问题:
makeHttpCall('/items',
items => {
for (itemId of items) {
makeHttpCall(`/items/${itemId}/info`,
itemInfo => {
makeHttpCall(`/items/${itemInfo.pic}`,
img => {
showImg(img);
});
});
}
});
beginUiRendering();
利用promise可以解决:
makeHttpCall('/items')
.then(itemId => makeHttpCall(`/items/${itemId}/info`))
.then(itemInfo => makeHttpCall(`/items/${itemInfo}.pic}`))
.then(showImg);
那么使用rxjs,应该如何解决相同的问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个例子上 Observable (异步计算的多个结果) 并不比Promise (异步计算的唯一结果) 更方便。因为每个计算 (makeHttpCall, showImg) 就只有一个结果。
一定要用Rx自然也能做,写出来应该会发现和Promise的版本区别不大,只是then变成了flatMap。
flatMap
或者concatMap
操作符把内部的事件流合并到主事件流上,逻辑上形容就是把上一个主事件流映射为若干子事件,之后再把子事件的结果作为一个新流拼接到主事件流上。详见:concatMap