Typescript async/await Promise调用差异

Typescript async / await Promise call difference?

本文关键字:调用 Promise await async Typescript      更新时间:2023-09-26

如果在Typescript 1.7/ES7中,我有三个函数:

async function f(): Promise<int> { /* ... */ }
async function g(): Promise<int> {
    return f();
}
async function h(): Promise<int> {
    return await f();
}

这些呼叫之间有什么区别:

g();    
h();    
await g();    
await h();    

g();一样直接调用异步函数会返回一个可以解析/拒绝的Promise

g().then((result) => {
  doSomethingWith(result);
  doSomethingElseWith(result);
});

在另一个Promise中返回Promise(这就是return f();所做的)将使用内部promise的值来解析外部promise。

只要调用g()就会启动g正在做的任何事情,而不等待它的完成,从而丢弃结果。

await调用g也需要封闭作用域是async函数,概念上"等待"g"返回"(实际上是解析/拒绝)。


使用await关键字调用异步函数与不使用await并使用Promise调用异步函数的作用基本相同,只是语法更好。所以这个:

async function f () { ... }
try {
  var result = await f();
  doSomethingWith(result);
} catch (error) {
  handle(error);
}

实际上与此相同:

async function f() { ... }
f().then(
  (result) => doSomethingWith(result),
  (error) => handle(error)
);