javascript - Rxjs 绑定(bind)创建 observable 的位置的上下文

标签 javascript rxjs rxjs5

我有一个在循环中创建的可观察数组。然后使用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/

相关文章:

javascript - 在 Codemirror/emmet 中使用 javascript 扩展缩写

javascript - Angular $watch 命令选择 undefined variable

javascript - 在同一元素上使用多个 .style.transform

javascript - Angular 2 rxjs 嵌套 Observables

javascript - 来自 Express 的响应未定义且待处理(React 前端)

javascript - RxJS observables 如何取消 promise ?

javascript - 获取文本框的值

rxjs:在 switchMap 后访问原始 observable 的结果

rxjs - 使用 rxjs withLatestFrom 函数