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

同一文件中Promise是否顺序执行?异步函数多次调用执行顺序问询

问题描述

我有一个返回Promise的异步函数,代码如下:

public async a(): Promise<string> {
  return 'hi'
}

在另一个文件中我通过如下方式调用该函数:

await service.a.then(hi => console.log(hi)).catch(err => { throw err }); 
await service.a.then(hi => console.log(hi)).catch(err => { throw err });

请问这两次调用是否会依次执行,且不存在交互问题?

回答

这两次调用会依次执行,而且不存在交互问题,具体说明如下:

  • 首先要纠正一个代码小问题:你写的service.a.then是错误的,应该调用函数service.a()才能得到Promise,否则是直接对函数对象调用.then,会触发报错。假设修正为service.a()的话——
  • 每次调用service.a()都会生成一个全新的Promise实例,两个实例之间完全独立,不会共享任何状态,自然不存在交互干扰的问题。
  • 代码里的两个await是串行执行的:第一个await会等待第一个Promise完成(无论是成功resolve还是失败reject),之后才会执行第二行的await调用,所以两次调用是严格按顺序执行的。
  • 另外你代码里的.catch(err => { throw err })其实是多余的,因为await本身就会把Promise的reject状态转化为抛出的异常,不过这部分不影响执行顺序和调用独立性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:52:05