initializePromise


  1. function initializePromise(promise, resolver) {
  2. try {
  3. resolver(
  4. function resolvePromise(value) {
  5. resolve(promise, value)
  6. },
  7. function rejectPromise(reason) {
  8. reject(promise, reason)
  9. }
  10. )
  11. } catch (e) {
  12. reject(promise, e)
  13. }
  14. }

函数 initializePromise 接收了两个参数,一个是 Promise 类,一个是用户传入的回调函数 resolver 。函数中调用了用户传入的 resolver ,并且传又传回了两个参数,这两个参数又是一个回调函数,由用户进行主动触发。一个是 resolvePromise,另外一个是 rejectPromise 主要是用来更改当前 promise 的状态。

resolve


  1. function resolve(promise, value) {
  2. if (promise === value) {
  3. reject(promise, selfFulfillment())
  4. } else if (objectOrFunction(value)) {
  5. let then
  6. try {
  7. then = value.then
  8. } catch (error) {
  9. reject(promise, error)
  10. return
  11. }
  12. handleMaybeThenable(promise, value, then)
  13. } else {
  14. fulfill(promise, value)
  15. }
  16. }

resolve 代码中主要核心的就是 fulfill 函数的调用,主要用来更改当前 promise 的状态和返回值。

fulfill


  1. function fulfill(promise, value) {
  2. if (promise._state !== PENDING) {
  3. return
  4. }
  5. promise._result = value
  6. promise._state = FULFILLED
  7. if (promise._subscribers.length !== 0) {
  8. asap(publish, promise)
  9. }
  10. }

fulfill 主要是用来修改当前 promise 返回的值以及 promise 当前的状态。