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

如何在jQuery的$(document).ready中使用Async/Await语法

问题原因

低版本jQuery(<3.0)的$(document).ready()回调如果返回非false/undefined的值时会出现逻辑异常,而async函数默认返回Promise对象,会触发这个兼容性问题。高版本jQuery(≥3.0)本身支持async回调,出现异常大概率是你的getProducts没有正确返回Promise对象。


通用兼容写法(所有jQuery版本都适用)

不要直接把async加在ready的回调函数上,在回调内部包裹一个自执行的async函数即可,完全兼容所有jQuery版本,同时满足async/await的使用需求:

let products = [];

$(document).ready(function() {
    // 内部自执行async函数,不会影响ready回调的返回值
    (async () => {
        await getProducts();
        products.forEach(product => console.log(product))
        // 后续需要使用products的逻辑都可以放在这个作用域内
    })()
})

// 正确实现getProducts,确保返回可await的Promise
const getProducts = async () => {
   // 示例:jQuery的$.ajax本身返回符合Promise规范的对象,可直接await
   const ajaxResult = await $.ajax({
       url: "你的后端接口地址",
       method: "GET"
   })
   products = ajaxResult;
}

如果你使用jQuery 3.0及以上版本

你的原有写法本身是合法的,只需要修正getProducts的Promise返回逻辑即可正常运行:

let products = [];

// 3.0+版本支持直接给ready回调加async
$(document).ready(async function() {
    await getProducts();
    products.forEach(product => console.log(product))
})

const getProducts = () => {
   // 直接返回$.ajax的执行结果即可,它本身是Promise兼容的
   return $.ajax({
       url: "你的后端接口地址",
       method: "GET"
   }).done(res => {
       products = res
   })
}

注意事项

如果需要在ready回调的外部访问products,必须确保访问时机在getProducts的Promise状态变为resolve之后,否则还是会拿到空数组。如果需要全局调用,可以通过触发自定义事件、或者把后续逻辑封装成函数在await之后调用的方式处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:04