Rxjs 绑定创建 observable 的地方的上下文
Rxjs bind context of place where observable was created
我有一个在循环中创建的可观察对象数组。然后使用 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 询问了此绑定的目的以及我试图解决的问题,所以我将描述真正的问题。
目的和实际问题
我正在尝试抓取网站列表(作为查询参数传递),获取它们的标题并将它们呈现在 html 和 return 中 html 返回给用户。这是我 open source repo, where solved this exact problem using node.js callbacks, async.js waterfall and promises. Now solving it using rxjs. Its just a way to learn different async techniques. This is 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}`)
我有一个在循环中创建的可观察对象数组。然后使用 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 询问了此绑定的目的以及我试图解决的问题,所以我将描述真正的问题。
目的和实际问题
我正在尝试抓取网站列表(作为查询参数传递),获取它们的标题并将它们呈现在 html 和 return 中 html 返回给用户。这是我 open source repo, where solved this exact problem using node.js callbacks, async.js waterfall and promises. Now solving it using rxjs. Its just a way to learn different async techniques. This is 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}`)