为什么在 Javascript 中使用异步而不使用等待?

thi*_*ous 3 javascript node.js promise async-await

我见过很多人定义异步函数而不像这样在其中使用await。

async function authMiddleware(req, res, next) => {
  try {
    const token = req.query.token
    const secret = process.env.JWT_SECRET
    jwt.verify(token, secret)
  } catch (err) {
    return res.status(403).json({ message: MESSAGES.TOKEN_EXPIRED })
  }
  return next()
}
Run Code Online (Sandbox Code Playgroud)

我附上这段代码只是为了举例。请不要关心里面的行的含义。

await在 javascript 中将函数定义为异步是否有任何好处或用例?

可能:他是否有可能打算通知用户它返回了承诺?

小智 5

ESLint 及其规则require-await所说的内容。

\n\n
\n

JavaScript 中的异步函数与其他函数的行为在两个重要方面有所不同:

\n\n
    \n
  • 返回值始终是一个 Promise。
  • \n
  • 您可以在其中使用await 运算符。
  • \n
\n\n

使用异步函数的主要原因是\n 通常使用await 运算符,...

\n
\n\n

MDN说的是:

\n\n
\n

异步函数声明定义了一个异步函数\xe2\x80\x94 一个返回 AsyncFunction 对象的\n 函数。异步函数通过事件循环以与其余代码不同的顺序运行,并返回隐式 Promise 作为其结果。但使用异步函数的代码的语法和结构看起来像标准同步函数。

\n
\n\n

很明显,异步函数不仅仅是为等待使用而设计的。然后,在异步函数中不使用await 就可以了。但是……有什么意义呢?

\n\n

我相信是使用像 Promise 这样的同步函数。以下示例来自javascript.info

\n\n
async function f() {\n  return 1;\n}\n\nf().then(alert); // 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

将与以下相同:

\n\n
async function f() {\n  return Promise.resolve(1);\n}\n\nf().then(alert); // 1\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

在 JavaScript 中没有任何原因将函数定义为异步有什么好处吗?

\n
\n\n

它可用于使代码更具可读性或更容易遵循。

\n\n

客户端的结果不会受到影响。

\n