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小时内删除。