promise
在开发中,经常需要用到promise,promise具有很多特性,这一次将对promise特性进行总结,并从零写一个promise。
步骤一
- Promise特点
- 1,创建时需要传递一个函数,否则会报错
- 2,会给传入的函数设置两个回调函数
- 3,刚创建的Promise对象状态是pending
class MyPromise {
constructor(handle) {
// 3,刚创建的Promise对象状态是pending
this.status = "pending";
// 1,创建时需要传递一个函数,否则会报错
if (!this._isFunction(handle)) {
throw new Error("请传入一个函数");
}
// 2,会给传入的函数设置两个回调函数
handle(this._resolve.bind(this), this._reject.bind(this))
}
_resolve() {
}
_reject() {
}
_isFunction(fn) {
return typeof fn === "function";
}
}
步骤二
- Promise特点
- 4,状态一旦发生改变就不可再次改变
- 5,可以通过then来监听状态的改变
- 5.1,如果创建监听时,状态已经改变,立即执行监听回调
- 5.2,如果创建监听时,状态未改变,会等状态改变后执行
- 5.3,同一promise对象可以添加多个then监听,状态改变时按照注册顺序依次执行
// 定义常量保存对象的状态
const PENDING = "pending";
const FULFILLED = "fulfilled";
const REJECTED = "rejected";
class MyPromise {
constructor(handle) {
// 3,刚创建的Promise对象状态是pending
this.status = PENDING;
// 成功回调的值
this.value = undefined;
// 失败回调的值
this.reason = undefined;
// 注册的成功回调
this.onResolvedCallbacks = [];
// 注册的失败回调
this.onRejectedCallbacks = [];
// 1,创建时需要传递一个函数,否则会报错
if (!this._isFunction(handle)) {
throw new Error("请传入一个函数");
}
// 2,会给传入的函数设置两个回调函数
handle(this._resolve.bind(this), this._reject.bind(