手写promise原理
时间: 2024-09-15 22:01:27 浏览: 87
手写Promise是一个模拟JavaScript原生Promise的机制,用于处理异步操作的结果。其核心原理主要包括以下几个步骤:
1. **构造函数**:创建一个新的Promise实例,它包含三种状态:pending(等待中)、fulfilled(已成功)和rejected(已失败)。这三个状态是Promise对象的基本属性。
```javascript
function Promise(executor) {
let resolve, reject;
const promise = {
then(onFulfilled, onRejected): Promise,
catch(onRejected): Promise, // 等同于then(null, onRejected)
state: 'pending',
value: undefined,
reason: undefined
};
try {
executor(resolve, reject);
} catch (error) {
reject(error);
}
return promise;
}
```
2. **回调函数**:`executor`接收两个函数作为参数,`resolve`用于将Promise从等待状态变为已完成状态并传递结果,`reject`用于将Promise变为已拒绝状态并传递错误。
3. **链式调用**:`then`方法接受两个回调函数,当Promise状态改变时,会依次执行这两个函数。如果当前状态已经是fulfilled,那么就调用第一个回调;如果是rejected,就调用第二个回调(默认的catch方法)。返回的是新的Promise,保持了链式调用的特点。
4. **状态转换**:只有在`resolve`或`reject`内部调用才会改变Promise的状态,外部无法直接修改状态。这样保证了一旦状态确定就不会再变化,提高了代码的可靠性。
```javascript
promise.then((value) => {
if (/* 检查状态为fulfilled */) {
// 成功处理值
return processValue(value); // 返回另一个Promise
} else {
throw new Error('处理失败');
}
}, (reason) => {
// 处理错误
});
```
阅读全文
相关推荐















