【问题标题】:SyntaxError: await is only valid in async function how can i use async?SyntaxError:等待仅在异步函数中有效我如何使用异步?
【发布时间】:2021-05-07 18:53:56
【问题描述】:

我想在中间件中使用异步等待

但是当我使用我的代码时发生了这个错误

const refrsh = await User.findOne({ ^^^^^ SyntaxError: await 仅在异步函数中有效

如何修复我的代码?

这是我的代码

            exports.authenticateToken = (req, res, next) => {
              const authHeader = req.headers["authorization"];
              const token = authHeader && authHeader.split(" ")[1];
              if (token == null) return res.sendStatus(401);
              jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
                if (err) {
                  const refreshToken = req.body.refreshToken;
                  const refrsh = await User.findOne({
                where: {id:req.body.kakaoid}
                  })
                }
              
                req.user = user;
                next();
              });
            };

【问题讨论】:

    标签: javascript node.js reactjs react-native


    【解决方案1】:

    只需将(err, user) 回调设为async 函数即可。在这种特殊情况下应该没问题:

    exports.authenticateToken = (req, res, next) => {
      const authHeader = req.headers["authorization"];
      const token = authHeader && authHeader.split(" ")[1];
      if (token == null) return res.sendStatus(401);
      jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, async (err, user) => {
        if (err) {
          const refreshToken = req.body.refreshToken;
          const refrsh = await User.findOne({
            where: { id: req.body.kakaoid },
          });
        }
    
        req.user = user;
        next();
      });
    };
    

    【讨论】:

      【解决方案2】:

      你需要await需要的贴花功能时添加async:

       jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, async (err, user) => { ...
      

      【讨论】:

        【解决方案3】:

        在匿名回调(err, user)函数之前使用async关键字。

        jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, async (err, user) => {
          // your code...
          const refrsh = await User.findOne({
            where: {id:req.body.kakaoid}
          });
         // your code...
        });
        

        【讨论】:

        • 这不是制作async的正确函数。
        • 更新了代码,忽略了内部函数。
        • 外部函数不需要是async,因为它不做任何异步操作。
        • 包含 await 代码的函数将是异步的。
        • 外部函数不需要是async,因为它只使用基于回调的异步。
        猜你喜欢
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 2021-01-14
        • 1970-01-01
        相关资源
        最近更新 更多