我有一个在循环中创建的可观察数组。然后使用merge
合并所有这些可观察量,并订阅合并后的可观察量。我找不到一种方法来检索创建它的可观察对象的上下文(在循环中)。这是代码
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询问了此绑定(bind)的目的以及我想要解决的问题,所以我将描述真正的问题。
目的和实际问题
我正在尝试抓取网站列表(作为查询参数传递),获取其标题并将其呈现在 html 中,然后将 html 返回给用户。这是我的 open source repo 的一部分,使用 Node.js 回调、async.js 瀑布和 Promise 解决了这个问题。现在使用rxjs解决它。它只是学习不同异步技术的一种方法。这是file from github repo哪里使用rxjs解决这个问题
最佳答案
如果您想保留对输入状态的引用,您可以使用 flatMap
重载,它采用 resultSelector
函数来创建包含合并的输入+输出状态的元组:
// given a function which can return the body of the page requested
function doRequest(url) : Observable<string>
const urls = Rx.Observable.from([a,b,c])
.flatMap(
a => doRequest(url),
(a,res) => ({ url: a, body: res})
)
.subscribe(resTuple => console.log(`url ${resTuple.url} returned ${resTuple.body}`)
关于javascript - Rxjs 绑定(bind)创建 observable 的位置的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40735851/