javascript promise 实现原理
JavaScript Promise 实现原理
Promise 是 JavaScript 中实现异步编程的一种方式,它可以更加优雅地处理异步操作。在本文中,我们将深入研究 Promise 的实现原理。
1. Promise 概述
Promise 是一个对象,它代表了一个异步操作的最终完成或失败,并且可以返回一个值。Promise 有三种状态:pending(等待中)、fulfilled(已完成)和rejected(已失败)。当 Promise 处于 pending 状态时,它可以转换为 fulfilled 或 rejected 状态。
2. Promise 构造函数
Promise 构造函数是用来创建 Promise 对象的。它接受一个函数作为参数,这个函数有两个参数:resolve 和 reject。resolve 用于将 Promise 的状态从 pending 转换为 fulfilled,reject 用于将 Promise 的状态从 pending 转换为 rejected。
```
function MyPromise(fn) {
var self = this;
self.status = 'pending'; // 初始状态
self.value = undefined; // resolved 值
ason = undefined; // rejected 值
function resolve(value) {
if (self.status === 'pending') {
self.status = 'resolved';
self.value = value;
}
}
function reject(reason) {
if (self.status === 'pending') {
self.status = 'rejected';
ason = reason;
}
}
try {
fn(resolve, reject);
} catch (e) {
reject(e);
}
}
```
3. then 方法
then 方法是用于注册回调函数的方法,当 Promise 状态变为 fulfilled 或 rejected 时,then 方法会被调用。then 方法接受两个参数:onFulfilled 和 onRejected,它们分别是 Promise 状态变为 fulfilled 或 rejected 时的回调函数。
```
MyPromise.prototype.then = function(onFulfilled, onRejected) {
var self = this;
var promise2;
onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : function(value) { return value; };
onRejected = typeof onRejected === 'function' ? onRejected : function(reason) { throw reason; };
if (self.status === 'resolved') {
return promise2 = new MyPromise(function(resolve, reject) {
try {
var x = onFulfilled(self.value);
resolvePromise(promise2, x, resolve, reject);
} catch (e) {
reject(e);
}
});
}
if (self.status === 'rejected') {
return promise2 = new MyPromise(function(resolve, reject) {
try {
resolved是什么状态 var x = ason);
resolvePromise(promise2, x, resolve, reject);
} catch (e) {
reject(e);
}
});
}
if (self.status === 'pending') {
return promise2 = new MyPromise(function(resolve, reject) {
ResolvedCallbacks.push(function() {
try {
var x = onFulfilled(self.value);
resolvePromise(promise2, x, resolve, reject);
} catch (e) {
reject(e);
}
});
RejectedCallbacks.push(function() {
try {
var x = ason);
resolvePromise(promise2, x, resolve, reject);
} catch (e) {
reject(e);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论