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来传递数据。