TypeScript中await fetch执行后回调函数延迟触发问题排查
问题根因
你直接连续调用异步函数download时没有添加await等待执行完成,三个异步任务会并行启动:几乎同时发起三个fetch请求,待所有请求的Blob解析完成后才会依次触发C++侧回调,最终就出现了你观察到的错误输出顺序。
修复方案
如果要实现「下载url1→触发回调→下载url2→触发回调→下载url3→触发回调」的串行执行效果,用自执行async函数包裹调用逻辑,依次等待每个download执行完成即可:
async download(sUrl: string): Promise<void> { const fetRes:Response = await fetch(sUrl, {method: eHttpMethod.GET}) const BlobRes:Blob = await fetRes.blob() // 调用C++侧回调 this.CALLBACK(WEBSOCKET, readyStage,'iDOINVOKE'); } // 串行执行调用逻辑 (async () => { await download("url1"); await download("url2"); await download("url3"); })();
如果你的业务场景允许三个请求并行发起、但要求回调严格按url1、url2、url3的顺序触发,可以用Promise.all收集所有请求结果后再依次执行回调。
内容的提问来源于stack exchange,提问作者Hani Gotc Reinstate Monica
相关产品推荐
相关产品推荐

