如何调试rxjs5?
How to debug rxjs5?
在 RxJS - Goals 我读到他们的目标是更好的可调试性:
Goals
Provide more debuggable call stacks than preceding versions of RxJS
我刚刚开始使用 redux-observable
,与 redux-saga
相比,我更容易理解,因为我已经习惯了 lodash
和 [= 的反应式风格13=](好的,可能是 fp 风格;)。我很惊讶还不能调试它。是真的吗?如果是这样,那么我可能要切换到 redux-saga
s 或坚持使用 redux-thunk
。
根据 Jay Phelps 的回答进行编辑
我所说的调试是指:"How to set a breakpoint on e.g. observable.map(...)
in a browser?" 使用 lodash
我可以在浏览器中设置一个断点,它就在 _.map(...)
处停止。如何使用 redux-observable
(或 rxjs
)?我不想依赖弹珠图和 console.log()
.
的绘制
当然可以调试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 那样可转移,后者在各个地方都被使用。 redux-observable 内部超级超级 super 简单,它真的只是给你一个自然的方式让你使用 RxJS。因此,如果您了解(或想要了解)RxJS,那将是非常自然的选择。
目前我对大多数人的建议是,如果你必须问你应该使用哪个,你可能应该选择 redux-saga。
(免责声明:我是 redux-observable 和 RxJS v5 的维护者之一)
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))
在 RxJS - Goals 我读到他们的目标是更好的可调试性:
Goals
Provide more debuggable call stacks than preceding versions of RxJS
我刚刚开始使用 redux-observable
,与 redux-saga
相比,我更容易理解,因为我已经习惯了 lodash
和 [= 的反应式风格13=](好的,可能是 fp 风格;)。我很惊讶还不能调试它。是真的吗?如果是这样,那么我可能要切换到 redux-saga
s 或坚持使用 redux-thunk
。
根据 Jay Phelps 的回答进行编辑
我所说的调试是指:"How to set a breakpoint on e.g. observable.map(...)
in a browser?" 使用 lodash
我可以在浏览器中设置一个断点,它就在 _.map(...)
处停止。如何使用 redux-observable
(或 rxjs
)?我不想依赖弹珠图和 console.log()
.
当然可以调试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 那样可转移,后者在各个地方都被使用。 redux-observable 内部超级超级 super 简单,它真的只是给你一个自然的方式让你使用 RxJS。因此,如果您了解(或想要了解)RxJS,那将是非常自然的选择。
目前我对大多数人的建议是,如果你必须问你应该使用哪个,你可能应该选择 redux-saga。
(免责声明:我是 redux-observable 和 RxJS v5 的维护者之一)
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))