当前位置:首页 > 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 eventbus实现原理

vue eventbus实现原理

Vue EventBus 的实现原理 EventBus 是 Vue 中用于跨组件通信的一种模式,通常基于 Vue 的实例事件系统实现。其核心原理是通过一个独立的 Vue 实例作为事件中心,实现组件间的…

vue框架实现原理

vue框架实现原理

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

vue 监听实现原理

vue 监听实现原理

Vue 监听实现原理 Vue 的监听机制主要通过 Object.defineProperty 或 Proxy 实现数据劫持,结合观察者模式(Observer-Watcher-Dep)完成依赖收集和派发…

vue template实现原理

vue template实现原理

Vue Template 的实现原理 Vue 的模板(Template)是通过编译转换成渲染函数(Render Function)的,最终生成虚拟 DOM(Virtual DOM)并渲染到真实 DOM…

vue权限实现原理

vue权限实现原理

Vue权限实现原理 Vue权限控制的核心在于动态路由和组件级权限校验,通常结合后端返回的权限数据实现。以下是常见的实现方式: 路由级权限控制 路由级权限通过动态生成可访问路由表实现。用户登录后获取权…

react vue 实现原理

react vue 实现原理

React 实现原理 React 的核心思想是基于虚拟 DOM(Virtual DOM)和组件化开发。虚拟 DOM 是一个轻量级的 JavaScript 对象,用于描述真实 DOM 的结构。React…