手写简版promise(二)实现.then()方法

then方法的用法

let p = new Promise((resolve, reject) => {
	resolve('success1')
 })
p.then(res => {
	console.log(res); // success1
})

上面代码可以看到then方法接收的是一个回调函数,并且输出resolve中返回的数据,根据这个思路往下写

自己的then方法

export default class MyPromise {
  constructor(fn) {
    this['[[PromiseState]]'] = 'pending'
    this['[[PromiseResult]]'] = undefined
    fn(this._resolve.bind(this), this._reject.bind(this))
  }
  _resolve(successRes) {
    this['[[PromiseState]]'] = 'fulfilled'
    this['[[PromiseResult]]'] = successRes
  }
  _reject(errRes) {
    this['[[PromiseState]]'] = 'rejected'
    this['[[PromiseResult]]'] = errRes
  }
  then(onResolve) {
    onResolve(this['[[PromiseResult]]'])  // 将传入的回调函数执行,并且传入resolve执行之后的值,也就是[[PromiseResult]]的值
  }
}

问题1

以上代码是不是很容易的就实现了,但是如果在调用地方将resolve异步返回呢?
手写简版promise(二)实现.then()方法_第1张图片

这个时候再调用then方法就没有返回成功的值了,这是因为then方法的调用在resolve反回之前去获取值,所以没有获取到,这个该怎么办呢?要做到不管resolve什么时候执行,then都是在它之后拿到值去返回,那我们可以将then方法中的回调在_resolve方法中执行,这样就是等_resolve执行完之后执行then中的回调

问题二

下面代码解决了在问题一中异步的问题

你可能感兴趣的:(promise原理,javascript)