当前位置:首页 > JavaScript

deferred实现原理 js

2026-03-16 05:48:41JavaScript

deferred实现原理

在JavaScript中,deferred通常指一种延迟对象模式,用于管理异步操作的状态和回调。jQuery的$.Deferred是经典实现,现代JavaScript已由Promise替代,但原理类似。

核心概念

延迟对象包含三个状态

  • pending:初始状态,未完成也未拒绝
  • resolved:操作成功完成
  • rejected:操作失败

状态一旦改变(resolved/rejected)便不可逆。

实现机制

状态管理: 通过内部变量存储当前状态,提供resolve()reject()方法修改状态:

function Deferred() {
  let state = 'pending';
  let callbacks = [];
  let errCallbacks = [];

  this.resolve = function(value) {
    if (state !== 'pending') return;
    state = 'fulfilled';
    callbacks.forEach(fn => fn(value));
  };

  this.reject = function(reason) {
    if (state !== 'pending') return;
    state = 'rejected';
    errCallbacks.forEach(fn => fn(reason));
  };
}

回调注册: 通过then()方法添加成功/失败回调,若状态已变更则立即执行:

this.then = function(onFulfilled, onRejected) {
  if (state === 'fulfilled') onFulfilled(value);
  else if (state === 'rejected') onRejected(reason);
  else {
    callbacks.push(onFulfilled);
    errCallbacks.push(onRejected);
  }
  return this;
};

链式调用

每次then()返回新Deferred对象,实现链式调用:

this.then = function(onFulfilled, onRejected) {
  const newDeferred = new Deferred();
  // 包装回调以处理新Deferred的状态
  callbacks.push(value => {
    try {
      const result = onFulfilled(value);
      newDeferred.resolve(result);
    } catch (e) {
      newDeferred.reject(e);
    }
  });
  return newDeferred;
};

与Promise的关系

ES6的Promise是标准化的Deferred模式:

deferred实现原理 js

  • new Promise()相当于Deferred构造函数
  • resolve/reject方法对应Deferred的相应方法
  • then/catch实现相同的回调管理

实际应用示例

const deferred = new Deferred();
deferred.then(
  value => console.log('Success:', value),
  error => console.error('Error:', error)
);
setTimeout(() => deferred.resolve('Done'), 1000);

这种模式解耦了异步操作与回调逻辑,为复杂的异步流程控制提供了统一接口。

标签: 原理deferred
分享给朋友:

相关文章

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的核心要点: 响应式系统 Vu…

js放大镜的实现原理

js放大镜的实现原理

放大镜效果的基本原理 放大镜效果的核心是通过鼠标移动事件获取当前光标位置,动态计算放大区域的显示范围和比例。通常需要两个元素:原图容器和放大镜显示的容器。当鼠标在原图上移动时,放大镜容器显示对应位置的…

vue vif实现原理

vue vif实现原理

Vue v-if 实现原理 Vue 的 v-if 指令通过条件渲染控制 DOM 元素的显示与隐藏。其实现原理基于虚拟 DOM 和编译阶段的代码生成。 编译阶段 模板中的 v-if 会被编译为渲染函数…

vue watch 实现原理

vue watch 实现原理

Vue Watch 实现原理 Vue 的 watch 功能用于监听数据变化并执行回调函数。其核心原理基于 Vue 的响应式系统,通过依赖收集和触发更新机制实现。 依赖收集 在 Vue 的响应式系统中…

vue 指令实现原理

vue 指令实现原理

Vue 指令的实现原理 Vue 指令是 Vue.js 提供的一种特殊属性,用于在 DOM 元素上绑定特定的行为。指令的实现原理主要涉及以下几个核心机制: 指令的注册与解析 Vue 通过 Vue.di…

vue弹幕实现原理

vue弹幕实现原理

Vue 弹幕实现原理 弹幕功能的实现通常涉及数据管理、动画渲染和交互控制。以下是基于 Vue 的实现原理和关键步骤: 数据管理 弹幕数据通常存储在数组中,每条弹幕包含内容、颜色、速度、位置等信息。V…