如何让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
相关产品推荐
相关产品推荐

