RXJS5像Promises一样链接

时间:2016-11-30 06:42:50

标签: javascript typescript rxjs rxjs5

Hy all, 什么是最好的方式来链接RXJS5结果,就像承诺一样?

interface MyObj{
  name : string
  url: string
  html: any // async
}

// promise chaining, pretty simple
getMyObjWithPromise()
  .then(myObj=>{

   // promise, we get back html from myObj.url async
   return getMyObjHtmlWithPromise(myObj)
  })
  .then(myObj=>{

   // done, here we have myObj with html
  })

与RXJS5类似? 我们需要跨流共享myObj,并异步修改obj道具......

1 个答案:

答案 0 :(得分:3)

使用Promise和链接then()调用,您可以修改传递给连续处理程序的结果。

如果要返回另一个Observable,RxJS中的大多数类似选项是map()运算符或concatMap()。在某些情况下,do也可能有用,但无法修改传递的值。

Rx.Observable.fromPromise(getMyObjWithPromise())
  .map(myObj => {
    return myObj;
  })
  .concatMap(myObj => {
    // promise, we get back html from myObj.url async
    return Rx.Observable.fromPromise(getMyObjHtmlWithPromise(myObj));
  })
  .subscribe(myObj => {
    // done, here we have myObj with html
  });

请注意,通常您需要至少有一个订阅者才能使Observable发出值。