Sink 对 Source 有两种请求:
read
: 向 Source 请求数据,通过read(null, currCb)
来请求。abort
: 通知 Source 终止当前的 stream,通过read(endOrError, currCb)
来请求。endOrError
的类型是true | Error
,表示是一次正常的终止还是异常的终止。
对于 read
请求,Sink 应该基于 上一次的 read
请求回调了,再发起新的 read
请求这样的规则。
对于 abort
请求,由于有时 Source 也不知道何时需要 abort
(出现了异常或者外部其他条件触发的),因此可能在上一次 read
没有回调就发生。
- 对于 Sink 的
read
请求,如果”重入“(上一次read
没有结束,新的read
来了),Source 完成实际资源的读取后,仅仅调用最后一个传入的currCb
来传递数据。