You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery Deferred实现Promise时报dfrd.resolve is not a function错如何解决

错误原因
  • 最核心的触发原因是$.Deferred()执行后返回的对象不是标准jQuery Deferred实例,导致实例上不存在resolve方法,常见触发场景如下:
    • $符号被其他第三方库(如Prototype、Zepto等)覆盖,未正确指向jQuery对象,或页面未正确引入1.5版本以上的jQuery
    • 实际运行的代码中Deferred实例化时漏写括号,写成var dfrd = $.Deferred,此时dfrd拿到的是Deferred构造函数本身而非实例
  • 后续尝试的两种修改写法本身存在逻辑错误:
    • hits => dfrd.resolve(hits)仅定义了箭头函数,并未实际执行resolve调用
    • dfrd.resolve=hits直接将resolve方法覆盖为普通变量值,自然会触发「不是函数」的报错,两种写法均需要回滚
修复方案
  1. 先确认jQuery加载状态:在var dfrd = $.Deferred();后插入console.log(typeof dfrd.resolve),如果输出不为function则说明Deferred实例生成异常
  2. 避免$符号冲突的修复写法:
function retrievecount(id, type) {
    // 使用jQuery全称替代$符号,规避命名冲突
    var dfrd = jQuery.Deferred();
    var hits = "the result";
    dfrd.resolve(hits);
    return dfrd.promise();
}

// 调用代码不变
retrievecount(id, type)
    .then(function(hits) {
        // 正常处理hits逻辑
    });
  1. 无jQuery依赖的原生Promise实现方案:
function retrievecount(id, type) {
    return new Promise((resolve) => {
        var hits = "the result";
        resolve(hits);
    });
}

// 调用代码完全兼容原有写法
retrievecount(id, type)
    .then(function(hits) {
        // 正常处理hits逻辑
    });

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:36:05