【发布时间】:2016-11-22 07:16:00
【问题描述】:
我有一个循环创建的 observables 数组。然后使用 merge 合并所有这些 observable,并订阅合并后的 observable。我找不到一种方法来检索可观察对象的上下文(在循环中)。这是代码
let observable = Rx.Observable.bindNodeCallback(request);
let streams = _(['a', 'b', 'c', 'd'])
.someMoreLodashStuff()
.map(val => {
// HERE SOMEHOW I WANT TO BIND CONTEXT (e.g. loop val),
// SO THAT SUBSCRIBER CAN KNOW THE EXACT LOOP STATE
// WHEN RECEIVING RESULT
return observable(mutate(val))
})
.value();
Rx.Observable
.merge(...streams)
.subscribe(
(res) => {
// HERE I WANT TO GET CONTEXT (e.g. val)
}, (err) => {
// HERE I WANT TO GET CONTEXT (e.g. val)
},
() => {
//on complete stuff
});
更新(@martin 要求)
由于@martin 询问了此绑定的目的以及我要解决的问题,所以我将描述真正的问题。
假设和实际问题
我正在尝试抓取网站列表(作为查询参数传递),获取它们的标题并将它们呈现在 html 中并将 html 返回给用户。这是我的open source repo 的一部分,其中使用 node.js 回调、async.js 瀑布和 Promise 解决了这个确切的问题。现在使用 rxjs 解决它。它只是学习不同异步技术的一种方式。这是file from github repo 使用 rxjs 解决这个问题的地方
【问题讨论】:
-
你可以从第一个 map() 返回
this。我不明白这应该做什么或您要解决什么问题。为什么订阅者应该知道 map() 操作符某处使用的上下文? -
@martin 更新了问题。我想现在您可以更好地理解真正的问题,并且您可以看到从第一个
map返回this将导致Rx.Observable.merge()失败,因为它需要 Observables。 -
我还在 github (@martinsik) 中我想要绑定的文件中的确切行标记了你。我希望这可以更好地回答您的问题。
标签: javascript rxjs rxjs5