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}`)