switch / mergeAll / flatten不是函数 - 在cyclejs

时间:2016-07-03 03:11:08

标签: javascript rxjs reactivex cyclejs

我正在学习CycleJS,我发现在使用Cycle的HTTP驱动程序时,我必须使用RxJS response stream stream合并switch/mergeAll以获得流级别。但是当我尝试应用这些函数时,我遇到了类型错误:switch is not a function(在响应流上)。

  const response$$ = sources.HTTP
            .filter(response$ => response$.request.url === 'http://jsonplaceholder.typicode.com/users/1')
  const response$ = response$$.switch()

如果我遗失了什么,请你告诉我吗?

2 个答案:

答案 0 :(得分:2)

@cycle/http filter会返回元信息,因此它不具备的功能。

要获取,在filter之后,使用response$$从生成的元数据中提取response$$流,并且然后flatten它:

const response$$ = sources.HTTP
  .filter(response$ => response$.request.url === 'http://jsonplaceholder.typicode.com/users/1')
  .response$$
const response$ = response$$.flatten()

现在,您可以继续使用map等。(可用的运营商取决于您使用的Cycle.js版本。最新版本使用xstream来使用httpSource.response$$&#39}。 s stream 引擎。)

@ cycle / http response$$

  

使用HTTP源,您还可以使用const response$ = sources.HTTP .filter(response$ => response$.request.url === 'http://jsonplaceholder.typicode.com/users/1') .response$$.flatten() 来获取   元流。你应该在消耗之前弄平元流,   然后生成的响应流将发出响应对象   通过superagent收到。

或者你可以简单地说:

response$

现在您可以按预期使用{{1}}。

答案 1 :(得分:0)

switch是一个RxJS运算符,它在xstream中的模拟值为flatten。流引擎取决于您从哪个*-run包导入run函数。例如,如果您执行import {run} from 'rx-run',则来自驱动程序的所有源流都将带有稳定的RxJS 4接口。

所有这些多流引擎的东西都是全新的,在最新版本中推出。您可以考虑阅读migration guide