Javascript Rxjs绑定创建可观察对象的位置的上下文

Javascript Rxjs绑定创建可观察对象的位置的上下文,javascript,rxjs,rxjs5,Javascript,Rxjs,Rxjs5,我有一个在循环中创建的观察数组。然后使用merge合并所有这些观察值,并订阅合并后的观察值。我找不到一种方法来检索创建(在循环中)可观察对象的上下文。这是代码 let observable = Rx.Observable.bindNodeCallback(request); let streams = _(['a', 'b', 'c', 'd']) .someMoreLodashStuff() .map(val => { // HERE SOMEHOW I WANT TO BIN

我有一个在循环中创建的观察数组。然后使用
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格式呈现,然后将html返回给用户。这是my的一部分,其中使用node.js回调、async.js瀑布和承诺解决了这个问题。现在使用rxjs解决它。这只是学习不同异步技术的一种方式。这就是使用rxjs解决此问题的地方

如果要保留对输入状态的引用,可以使用重载,该重载使用
结果选择器
函数创建包含合并输入+输出状态的元组:

// 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}`)
//给定了一个函数,该函数可以返回请求的页面正文
函数doRequest(url):可观察
constURL=Rx.Observable.from([a,b,c])
.平面图(
a=>doRequest(url),
(a,res)=>({url:a,body:res})
)
.subscribe(resTuple=>console.log(`url${resTuple.url}返回${resTuple.body}`)

您可以从第一个map()返回
。我不明白这应该做什么,或者您试图解决什么问题。为什么您应该知道map()中某处使用的上下文操作员?@martin更新了这个问题。我想现在你们可以更好地理解真正的问题了,你们可以看到,从第一个
map
返回
this
将导致
Rx.Observable.merge()
失败,因为它需要可观察。我还在github(@martinsik)中标记了你们在文件中我想要绑定的确切行。我希望这可能会为您的问题提供更好的答案。非常好的答案,正是我所寻找的。感谢alot@Mark。只需一个问题,resultSelector仅在成功处理程序上可用,我们可以以任何方式获得错误处理程序您可以使用
捕获
来处理doRequest的错误,是吗帮助?是的,这就是我最后使用的。这是在应用了你的建议之后。