当前位置:首页 > JavaScript

deferred实现原理 js

2026-02-03 04:59:23JavaScript

实现原理

Deferred 在 JavaScript 中是一种用于管理异步操作的模式,通常与 Promise 类似,但提供更灵活的控制。核心思想是通过对象封装异步操作的状态(pending、resolved、rejected),并允许通过回调函数处理结果或错误。

核心机制

  1. 状态管理
    Deferred 对象内部维护三种状态:

    • pending:初始状态,表示操作未完成。
    • resolved:操作成功完成,触发成功回调。
    • rejected:操作失败,触发失败回调。
  2. 回调注册
    通过 thendonefail 等方法注册回调函数,这些函数会在状态改变时被调用。例如:

    deferred.then(successCallback, errorCallback);
  3. 状态触发
    通过 resolvereject 方法手动改变状态,并传递结果或错误信息:

    deferred实现原理 js

    deferred.resolve(data); // 触发成功回调
    deferred.reject(error); // 触发失败回调

简单实现示例

以下是一个基础的 Deferred 实现:

function Deferred() {
  let status = 'pending';
  let callbacks = { success: [], fail: [] };
  let result;

  this.then = function(onSuccess, onFail) {
    if (status === 'resolved') onSuccess(result);
    else if (status === 'rejected') onFail(result);
    else {
      if (onSuccess) callbacks.success.push(onSuccess);
      if (onFail) callbacks.fail.push(onFail);
    }
    return this;
  };

  this.resolve = function(data) {
    if (status !== 'pending') return;
    status = 'resolved';
    result = data;
    callbacks.success.forEach(fn => fn(data));
  };

  this.reject = function(error) {
    if (status !== 'pending') return;
    status = 'rejected';
    result = error;
    callbacks.fail.forEach(fn => fn(error));
  };
}

使用场景

  1. 封装异步操作
    例如 AJAX 请求:

    deferred实现原理 js

    const deferred = new Deferred();
    fetch(url).then(
      response => deferred.resolve(response),
      error => deferred.reject(error)
    );
    return deferred;
  2. 链式调用
    Deferred 的 then 方法支持链式调用,类似 Promise:

    deferred
      .then(handleSuccess)
      .then(handleNextStep);

与 Promise 的区别

  1. 控制权
    Deferred 允许外部手动调用 resolve/reject,而 Promise 的状态由执行器函数内部控制。

  2. 兼容性
    Deferred 是早期库(如 jQuery)的实现,现代 JavaScript 更推荐原生 Promise 或 async/await

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

相关文章

vue实现原理

vue实现原理

Vue 实现原理 Vue.js 的核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现细节的分解: 响应式系统 Vue 2.x 使用 Object.defineProp…

vue的实现原理

vue的实现原理

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

vue的原理实现

vue的原理实现

Vue 的核心原理实现 Vue.js 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现细节: 响应式系统 Vue 2.x 使用 Object.defineProper…

vue eventbus实现原理

vue eventbus实现原理

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

css动画制作原理

css动画制作原理

CSS动画制作原理 CSS动画通过改变元素的样式属性实现动态效果,主要依赖关键帧(@keyframes)和动画属性(如animation-name、animation-duration)的配合。核心原…

vue computed 实现原理

vue computed 实现原理

Vue Computed 实现原理 Vue 的 computed 属性是基于响应式依赖的缓存机制,其核心实现依赖于 Vue 的响应式系统和依赖收集机制。 依赖收集与缓存机制 computed 属性在…