promise

52 阅读1分钟

Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。

简易promise实现:

const PENDING = "PENDING";
const RESOLVE = "RESOLVE";
const REJECT = "REJECT";
class MyPromise {
  status = '';
  value = '';
  reason = '';
  constructor(handler) {
    this.status = PENDING;
    const resolve = (value) => {
      if (this.status == "PENDING") {
        this.status = RESOLVE;
        this.value = value;
      }
    };
    const reject = (reason) => {
      if (this.status == "PENDING") {
        this.status = REJECT;
        this.reason = reason;
      }
    };
    try {
      handler(resolve, reject);
    } catch (e) {
      reject(e);
    }
  }
  then(onFulfilled) {
    if (this.status == RESOLVE) {
      onFulfilled(this.value);
    }
  }
  catch(onRejected) {
    if (this.status == REJECT) {
      onRejected(this.reason);
    }
  }
}
const p1 = new MyPromise((resolve, reject) => {
  reject(1);
});
p1.then((e) => console.log(e));
p1.catch((e) => console.log(e));