首页 >web前端 >js教程 >JavaScript 中的异步函数总是返回 Promise 吗?

JavaScript 中的异步函数总是返回 Promise 吗?

Susan Sarandon
Susan Sarandon原创
2024-12-22 09:54:37733浏览

Do Async Functions in JavaScript Always Return Promises?

异步函数中的隐式 Promise

在 JavaScript 中,异步函数是可以异步等待 Promise 完成并返回其值的函数。然而,一个常见的误解是异步函数隐式返回其返回值的承诺。

理解返回值

虽然异步函数可能隐式返回一个承诺,这并不完全准确。异步函数的返回值可以是以下两种之一:

  • 非承诺值:当异步函数显式返回非承诺值时,它会自动将该值包装在承诺中。
  • 承诺:本身就是承诺的异步函数的返回值仍然存在

非承诺值示例:

async function increment(num) {
  return num + 1;
}

increment(3).then(num => console.log(num)); // Logs: 4

这里,我们从异步函数返回一个数字。然而,输出是通过 .then() 检索的,表明它是一个已解析为值 4 的 Promise。

显式 Promises:

如果我们从异步函数显式返回一个 Promise,我们收到该值的 Promise,而不是某个值的 Promise

async function increment(num) {
  return Promise.resolve(num + 1);
}

increment(3).then(num => console.log(num)); // Logs: 4

例外情况:

  • 空异步函数:即使异步函数没有显式 return 语句,它仍然会返回一个 Promise undefined.
  • 异步函数中的等待:在异步函数中使用等待不会影响该函数的类型返回值。如果返回值不是 Promise,它仍然会被包装在 Promise 中。

结论

JavaScript 中的异步函数隐式包装非 Promise 返回值在一个承诺中。但是,如果返回值已经是一个 Promise,则保持不变。这种行为与传统的 return 语句不同,但与 ES6 中生成器的基本原理一致。

以上是JavaScript 中的异步函数总是返回 Promise 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn