Node.js await always thows SyntaxError:await仅在sequelize的异步函数中有效

Node.js await always thows SyntaxError:await仅在sequelize的异步函数中有效,node.js,async-await,sequelize.js,Node.js,Async Await,Sequelize.js,Ubuntu 20 节点12.18.4 NPM 6.14.6 续集6.3.5 我遵循官方指南,现在很困惑。 成功配置Sequelize并连接后,我尝试运行(从官方文档) 它抛出SyntaxError:await仅在异步函数中有效 在官方的入门页面下,它明确指出: Sequelize提供的大多数方法都是异步的,因此返回承诺。它们都是承诺,因此您可以开箱即用地使用承诺API(例如,使用then、catch、finally)。 当然,使用async和await也可以正常工作 您必须像这样使用异步函数

Ubuntu 20
节点12.18.4
NPM 6.14.6
续集6.3.5

我遵循官方指南,现在很困惑。
成功配置Sequelize并连接后,我尝试运行(从官方文档)

它抛出
SyntaxError:await仅在异步函数中有效

在官方的入门页面下,它明确指出:

Sequelize提供的大多数方法都是异步的,因此返回承诺。它们都是承诺,因此您可以开箱即用地使用承诺API(例如,使用then、catch、finally)。
当然,使用async和await也可以正常工作


您必须像这样使用异步函数

getStateById: async (req, res) => {
              ^^^^^^

    sequelize.sequelize.transaction(async (t1) => {

        let state = await sequelize.state.findOne({
            where: {
                id: req.params.id
            }
        });

        let result = error.OK;
        result.data = state;

        logger.info(result);
        return res.status(200).send(result);
    }).catch(function (err) {
        logger.error(err);
        return res.status(500).send(error.SERVER_ERROR);
    });
}

当您想在应用程序中使用wait时,async是必需的。它将仅在async函数类型中使用,这意味着如果您必须等待,您需要在函数中声明一个异步外部函数:

async function() {
     await sequelize.authenticate();
}

记住在wait之前声明async,或者如果不想声明async wait,可以使用承诺

const nameYourFunction = () => {
  sequelize
    .authenticate()
    .then((result) => {
      console.log('nameYourFunction -> result', result);
    })
    .catch((error) => {
      console.log('nameYourFunction -> error', error);
    });
};

方法返回承诺,这是正确的,但问题是,具有
await
的函数必须是
async函数(或异步箭头函数
async()=>{}
)。它必须有
async
这个词。谢谢,这确实解决了我的问题。
const nameYourFunction = async () => {
     await sequelize.authenticate();
}
const nameYourFunction = () => {
  sequelize
    .authenticate()
    .then((result) => {
      console.log('nameYourFunction -> result', result);
    })
    .catch((error) => {
      console.log('nameYourFunction -> error', error);
    });
};