async
函数的设计就是这样的:无论你返回什么值,它都会自动被包装为一个 Promise
对象。这就是为什么说 async
函数最终返回的是一个新的 Promise
对象。
当你在 async
函数中使用 return
语句返回一个值时,这个值会成为最终返回的 Promise
对象的解析值。如果你在 async
函数中返回一个 Promise
,那么返回的 Promise
对象的解析值会成为最终返回的 Promise
对象的解析值。
下面的例子可以进一步解释这个概念:
async function foo() {
return 'bar';
}
foo().then(value => console.log(value)); // 输出 'bar'
虽然函数体中只是返回了一个字符串 'bar'
,但由于 foo
是一个 async
函数,所以它实际上返回的是一个解析为 'bar'
的 Promise
对象。
因此,你的代码 return await response.json();
实际上是在做以下事情:
- 等待
response.json()
返回的Promise
对象解析为 JSON 对象。 - 将 JSON 对象作为返回值。
- 由于这是一个
async
函数,返回的 JSON 对象被包装为一个解析为该 JSON 对象的新Promise
对象。
所以说,虽然你的函数体中返回了一个值,但由于你使用了 async
关键字,所以最终返回的总是一个 Promise
对象。