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

如何让Async/await仅在异步变量被引用时才暂停函数执行?

实现异步预加载,按需等待

可以实现你的需求——先启动异步请求,让后台并行处理,同时继续执行不依赖该数据的同步代码,直到需要使用异步数据时再等待请求完成。

核心思路是先触发异步任务但不立即等待,把Promise对象先保存下来,等需要数据的时候再对这个Promise执行await。

修改后的代码示例:

function someOtherAsyncFunc() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                doSomething: () => console.log("异步数据方法执行")
            });
        }, 3000)
    }) 
}

async function asyncFunc() {
    // 1. 先启动异步任务,获取Promise对象,此时异步操作已经开始执行
    const asyncDataPromise = someOtherAsyncFunc();

    // 2. 立即执行不依赖异步数据的同步任务,不会被阻塞
    console.log("sync task that doesn't depend on the asynchronous data");

    // 3. 当需要使用异步数据时,再await等待Promise完成
    const asyncData = await asyncDataPromise;
    asyncData.doSomething();
}

asyncFunc();

执行流程说明

  • 调用asyncFunc后,首先执行someOtherAsyncFunc(),启动3秒的定时器,同时返回一个Promise对象存在asyncDataPromise里,这一步不会阻塞代码。
  • 立刻执行console.log的同步任务,输出对应内容。
  • 当执行到await asyncDataPromise时,才会暂停等待(如果此时异步任务还没完成),等Promise resolve后,拿到数据再执行doSomething。

这样就实现了异步请求和同步任务并行执行,只在需要数据时才等待的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:27:26