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

jQuery中$.when函数未触发内部逻辑直接跳转.then回调问题求解

问题根本原因

$.when() 要求接收的参数是 jQuery Deferred/Promise 类型对象,你当前直接把一个函数定义作为参数传给了$.when(),没有主动调用这个函数,导致两个问题:

  • 函数内部的所有逻辑(包含console.log、条件判断、Ajax请求)完全不会执行,因为这个函数从始至终没有被触发运行
  • $.when() 会把传入的普通函数对象判定为「非Deferred类型的已完成值」,直接触发后续的.then()回调,这就是你看到then先执行、内部逻辑无响应的核心原因。

附带逻辑问题

你代码中if分支的返回逻辑也存在错误:

return dfd.resolve();

dfd.resolve()的返回值是undefined,不是Deferred对象,就算你调用了函数,if分支返回的非Deferred值也会让$.when()直接触发then,不会按照预期等待逻辑执行完成,正确写法是先修改Deferred状态再返回Deferred本身:

dfd.resolve()
return dfd

修复方案

把传入$.when()的匿名函数改为立即执行函数,也就是在函数定义末尾加(),让函数立刻执行并把返回的Deferred/ ajax对象传给$.when()即可:

$.when((function() {
    // 原有内部逻辑保持不变
})()).then(function() {
    // 原有then回调逻辑保持不变
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:57:04