promise原理
时间: 2023-06-30 15:05:56 浏览: 98
Promise 是 JavaScript 中一种用于异步编程的机制。Promise 可以将异步操作封装成一个对象,表示该异步操作最终会返回一个值或者抛出一个异常。Promise 是一种状态机,它有三种状态:
1. Pending(进行中)
2. Fulfilled(已成功)
3. Rejected(已失败)
Promise 对象的状态只能从 Pending 转变为 Fulfilled 或 Rejected 状态,一旦转变为其中一种状态,状态就不可再次发生改变。
Promise 对象有两个主要方法:
1. then() 方法:当 Promise 对象状态变为 Fulfilled 时,调用 then() 方法,将执行成功的回调函数。
2. catch() 方法:当 Promise 对象状态变为 Rejected 时,调用 catch() 方法,将执行失败的回调函数。
当创建一个 Promise 对象时,需要传入一个 executor 函数,该函数接受两个参数:resolve 和 reject,分别用于将 Promise 对象的状态设置为 Fulfilled 和 Rejected 状态。
下面是一个简单的 Promise 实现:
```
class Promise {
constructor(executor) {
this.status = 'pending';
this.value = undefined;
this.reason = undefined;
let resolve = (value) => {
if (this.status === 'pending') {
this.status = 'fulfilled';
this.value = value;
}
}
let reject = (reason) => {
if (this.status === 'pending') {
this.status = 'rejected';
this.reason = reason;
}
}
try {
executor(resolve, reject);
} catch (error) {
reject(error);
}
}
then(onFulfilled, onRejected) {
if (this.status === 'fulfilled') {
onFulfilled(this.value);
} else if (this.status === 'rejected') {
onRejected(this.reason);
}
}
catch(onRejected) {
if (this.status === 'rejected') {
onRejected(this.reason);
}
}
}
```
在上述实现中,executor 函数接受两个参数 resolve 和 reject,当异步操作成功时,调用 resolve(value) 方法将 Promise 对象的状态设置为 Fulfilled 状态,并将结果 value 传递给 then() 方法的回调函数;当异步操作失败时,调用 reject(reason) 方法将 Promise 对象的状态设置为 Rejected 状态,并将失败原因 reason 传递给 catch() 方法的回调函数。在 then() 和 catch() 方法中,根据 Promise 对象的状态执行相应的回调函数。
阅读全文