Typescript 方法的声明中是否有 async 关键字有什么区别

问题描述 投票:0回答:1

我只是想知道关键字

async
在方法声明中是否有任何功能差异,如果该方法将返回 Promise 类型。

例如:

async function a(): Promise<string> {
  return Promise.resolve("method a");
}

function b(): Promise<string> {
  return Promise.resolve("method b");
}

有和没有

async
关键字有功能上的区别吗?

node.js typescript
1个回答
0
投票

在幕后可能存在一些我不知道的细微实现差异(并且可能因实现而有所不同),但功能上他们做同样的事情。 这两个函数都返回一个

Promise
,它解析为一个字符串。

请注意,在给出的示例中,第一个函数是多余的。 这甚至可能是问题的根源。

这个函数是正确的并返回一个

Promise<string>
:

function b(): Promise<string> {
  return Promise.resolve("method b");
}

要使用

async
实现相同的功能,您不需要
Promise
:

async function a(): Promise<string> {
  return "method a";
}

async
函数总是隐式返回
Promise
。 如果返回的值不是
Promise
那么它会被悄悄地包裹在一个中。 这允许这样的事情:

async function a(): Promise<string> {
  if (someCondition) {
    return "method a";
  }
  return await someMethod(); // someMethod() itself returns a Promise<string>
}

注意返回值技术上在基本层面上是“不同的”,因为根据条件,函数要么返回字符串,要么返回解析为字符串的

Promise
。 在前一种情况下,根本没有发生任何异步操作。

从功能上来说,这并不重要,因为引擎将确保返回的字符串包装在

Promise
中,因此使用代码始终可以将操作视为异步操作。

© www.soinside.com 2019 - 2024. All rights reserved.