这个forEach 不完全算一个operator
Signature
/** |
接受两个参数:
- 第一个是funtion,forEach的流会订阅后,把value 给这个function当参数,并执行.
- 第二个参数 是要给一个Promise的构造,让他知道如何new 一个promise
Source Code
forEach(next, PromiseCtor) { |
重点在他new 的promise里
他判断是否是异步流,如果是就把值给参数方法执行,有erro了就执行reject,取消订阅
如果是forEach的调用者是不是异步流就执行(当数组的forEach用了)
onError的时候调用reject, complete的时候调用resolve,因为他返回的是 promise
var button = $("button"); |
看例子:
- 直接执行他会走then,因为他complete调用了resolve.所以5次后打印”complete”
- 打开throw error的注释, 他会打印 “catch the error”,因为onError 调用 reject走到catch里了
forEach相当于:
- 内部订阅并执行某个方法(提供的next)
- 返回promise方便处理error 和complete