我只是想知道关键字
async
在方法声明中是否有任何功能差异,如果该方法将返回 Promise 类型。
例如:
async function a(): Promise<string> {
return Promise.resolve("method a");
}
function b(): Promise<string> {
return Promise.resolve("method b");
}
有和没有
async
关键字有功能上的区别吗?
在幕后可能存在一些我不知道的细微实现差异(并且可能因实现而有所不同),但功能上他们做同样的事情。 这两个函数都返回一个
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
中,因此使用代码始终可以将操作视为异步操作。