如何调试rxjs5?

时间:2016-07-26 12:48:35

标签: debugging rxjs5 redux-saga redux-observable

RxJS - Goals上我读到他们的目标是更好的可调试性:

  

目标

     

提供比以前版本的RxJS

更多的可调试调用堆栈

我刚刚开始使用redux-observable,因此我很容易理解将它与redux-saga进行比较,因为我已经习惯了lodash和{{1}的反应式(好吧,fp风格也许;)。我很惊讶它还没有调试它。这是真的吗?如果是这样,那么我必须切换到ramda或者坚持redux-saga

根据Jay Phelps的回答编辑

通过调试我的意思是:"如何设置一个断点,例如redux-thunk在浏览器中?"使用observable.map(...)我可以在浏览器中设置断点,它会在lodash上停在那里。如何使用_.map(...)(或redux-observable)进行操作?我不想依赖于绘制大理石图和rxjs

2 个答案:

答案 0 :(得分:13)

当然可以调试RxJS代码。我认为如果不是这样的话,几乎没有人会使用它可能是安全的 - Angular2也非常依赖它。

人们使用的最常见方式与调试其他JavaScript,断点(例如调试器)和console.log()的

的方式相同

一些用户使用更高级的技术,如绘制依赖图或大理石图。 André Staltz wrote about this最近,这可能是一个有用的资源。

最终,任何类型的异步编程都将更难调试。这不是redux-observable / RxJS独有的;快速搜索将揭示对redux-saga的大量调试问题。

事实证明,redux-thunk是构建绝大多数应用程序的最佳解决方案,因为其中大多数应用程序没有复杂的副作用问题,这些问题证明了redux-observable或redux-saga等。虽然如果你已经精通RxJS,那么使用redux-observable就没有错误

作为一个项目,redux-saga比redux-observable存在的时间更长,这无疑是一个主要的卖点。您将找到更多文档,示例,并且可能有更好的社区来获得支持。

计数器是你在redux-saga中学到的运算符和API几乎不像学习RxJS那样可以转移,RxJS遍布各地。 redux-observable在内部是超级超强超级简单,它实际上只是为您提供了一种使用RxJS的自然方式。所以如果你知道RxJS(或者想要),那就非常自然了。

我对大多数人的建议是,如果你不得不问你应该使用哪一个,你可能应该选择redux-saga。

(免责声明:我是redux-observable和RxJS v5的维护者之一)

答案 1 :(得分:3)

import Rx, { Observable } from 'rxjs'

const arrStream$ = Observable.of(1,2,3)
                    .do(x=>console.log('Before',x))  // 1, 2, 3
                    .map(x=>x*2)
                    .do(x=>console.log('After',x))   // 2, 4, 6
                    .subscribe(value=>doThingsWith(value))
// real console output
// Before 1
// After  2
// doThingsWith(2)
// Before 2
// After  4
// doThingsWith(4)
// Before 3
// After  6
// doThingsWith(6)
  

.do(debugValue => console.log(debugValue))