debugAll
debugAll 是一个在流链的所有节点上输出执行结果的调试插件,用于调试和监控数据流,只能在 Stream
节点上使用。
类型定义
typescript
debugAll: (resolvePrefix?: string, rejectPrefix?: string, ignoreUndefined?: boolean) => {
executeAll: ({
result,
status,
onfulfilled,
onrejected,
root,
}: {
result: Promise<any> | any
status: PromiseStatus | null
onfulfilled?: OnFulfilled
onrejected?: OnRejected
root: boolean
}) => any
}
参数
resolvePrefix
(可选): 成功时的控制台前缀,默认为'resolve'
rejectPrefix
(可选): 失败时的控制台前缀,默认为'reject'
ignoreUndefined
(可选): 是否忽略undefined
值的输出,默认为true
详细说明
- 在流链的所有节点上执行,而不是单个节点
- 只在以下情况下输出:
- 根节点 (
root=true
) - 有成功处理器的节点 (
onfulfilled
) - 有错误处理器的节点 (
onrejected
) 且状态为REJECTED
- 根节点 (
- 对于
Promise
类型的结果,会等待 Promise 解析后再输出 - 默认忽略
undefined
值的输出 (ignoreUndefined=true
),可通过第三个参数控制 - 返回原始的
result
,不修改数据流
示例
场景 1:基本调试输出
typescript
import { $ } from 'fluth'
import { debugAll } from 'fluth'
const stream$ = $().use(debugAll())
stream$.next(1)
// 输出: resolve 1
const promise = Promise.resolve(2)
stream$.next(promise)
// 输出: resolve 2
场景 2:流链调试输出
typescript
import { $ } from 'fluth'
import { debugAll } from 'fluth'
const promise$ = $().use(debugAll())
promise$.then((value) => value + 1).then((value) => value + 1)
promise$.next(1)
// 输出:
// resolve 1
// resolve 2
// resolve 3
场景 3:自定义前缀调试输出
typescript
import { $ } from 'fluth'
import { debugAll } from 'fluth'
// 自定义前缀
const promise$ = $().use(debugAll('success', 'failure'))
promise$.then((value) => value + 1)
promise$.next(1)
// 输出:
// success 1
// success 2
const rejectedPromise = Promise.reject(new Error('error'))
promise$.next(rejectedPromise)
// 输出: failure Error: error
场景 4:与操作符结合的调试输出
typescript
import { $ } from 'fluth'
import { debugAll, debounce } from 'fluth'
const promise$ = $()
.use(debugAll())
.pipe(debounce(100))
.then((value) => value + 1)
promise$.next(1)
promise$.next(2)
promise$.next(3)
promise$.next(4)
promise$.next(5)
// 输出:
// resolve 1
// resolve 2
// resolve 3
// resolve 4
// resolve 5
// 100ms 后: resolve 6
场景 5:undefined
值处理
typescript
import { $ } from 'fluth'
import { debugAll } from 'fluth'
// 默认忽略 undefined 值
const stream1$ = $().use(debugAll())
stream1$.next(undefined) // 无输出
stream1$.next(null) // 输出: resolve null
stream1$.next(0) // 输出: resolve 0
stream1$.next('') // 输出: resolve ""
stream1$.next(false) // 输出: resolve false
// 不忽略 undefined 值
const stream2$ = $().use(debugAll('resolve', 'reject', false))
stream2$.next(undefined) // 输出: resolve undefined
场景 6:边界情况处理
typescript
import { $ } from 'fluth'
import { debugAll } from 'fluth'
const stream$ = $().use(debugAll())
// 测试各种边界值
stream$.next(null) // 输出: resolve null
stream$.next(0) // 输出: resolve 0
stream$.next('') // 输出: resolve ""
stream$.next(false) // 输出: resolve false
stream$.next(undefined) // 无输出(默认忽略)
// Promise 边界情况
const resolveUndefined = Promise.resolve(undefined)
stream$.next(resolveUndefined) // 无输出(undefined 被忽略)
const rejectUndefined = Promise.reject(undefined)
stream$.next(rejectUndefined) // 无输出(undefined 被忽略)
场景 7:移除插件
typescript
import { $ } from 'fluth'
import { debugAll } from 'fluth'
const plugin = debugAll()
const stream$ = $().use(plugin)
stream$.then((value) => value + 1)
stream$.next(1)
// 输出: resolve 1, resolve 2
stream$.remove(plugin)
stream$.next(2)
// 无输出