AWS Lambda中Sequelize报错sequelize.authenticate(...).done is not a function
错误原因及修复方案
错误原因
你使用的新版本Sequelize已经移除了.done()方法。该方法是早期Sequelize依赖Bluebird promise库时的非标准API,在Sequelize v4及以上版本已经全面切换为标准ES Promise实现,而标准Promise链末尾不存在.done()方法,调用后就会触发not a function类型错误。
修复方案
根据业务场景二选一即可:
- 方案1:无额外收尾逻辑时,直接删除末尾的
.done()调用即可,标准Promise链到.catch()就已经完成了全部逻辑,不需要额外调用方法。修改后的代码如下:
sequelize .authenticate() .then(function() { console.log("DATABASE CONNECTED! "); }) .catch(err => { console.log(err); });
- 方案2:如果需要执行无论成功失败都要运行的收尾逻辑,将
.done()替换为标准ES Promise支持的.finally()方法即可:
sequelize .authenticate() .then(function() { console.log("DATABASE CONNECTED! "); }) .catch(err => { console.log(err); }) .finally(() => { // 此处填写收尾逻辑 });
修复后建议全局检查代码中其他位置是否还有调用.done()的逻辑,统一替换避免同类报错。
内容的提问来源于stack exchange,提问作者David B
相关产品推荐
相关产品推荐

