如何异步返回sequelize实例



我似乎无法正确地将sequelize对象从service.js文件传递到index.jssequelize变量。

有什么东西看起来不合适吗?

index.js

let sequelize;
let contractModel;
(async () => {
sequelize = await lambdaHelper.init(); //The issue is here
contractModel = require('./models/Contract')(sequelize, Sequelize); 
})();

service.js

exports.init = async () => {
let sequelize = await new Sequelize(process.env.FNI_DATABASE, process.env.FNI_USER, process.env.FNI_PASSWORD, {
host: process.env.FNI_HOST,
dialect: 'mysql',
operatorsAliases: false,
define: {
timestamps: false,
freezeTableName: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
return sequelize;
};

service2.js以下代码同步工作

exports.init = () => new Sequelize(process.env.FNI_DATABASE, process.env.FNI_USER, process.env.FNI_PASSWORD, {
host: process.env.FNI_HOST,
dialect: 'mysql',
logging: false,
operatorsAliases: false,
define: {
timestamps: false,
freezeTableName: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});

结果

***********之前的***********(节点:66912(未处理的PromiseRejection警告:未处理的promise拒绝(拒绝id:1(:TypeError:无法读取的属性"findAll"未定义(节点:66912([DEP0018]不推荐警告:未处理的承诺拒绝被否决。在未来,承诺拒绝未处理将以非零退出终止Node.js进程密码

结果2

***********之前的***********(节点:66540(未处理的PromiseRejection警告:未处理的promise拒绝(拒绝id:1(:TypeError:无法读取的属性"findAll"未定义(节点:66540([DEP0018]不推荐警告:未处理的承诺拒绝被否决。在未来,承诺拒绝未处理将以非零退出终止Node.js进程密码正在执行(默认(:SELECT 1+1 AS结果类型错误:无法读取未定义的属性"define"在模块上。在上导出

await new Sequelize(...)在上面的代码中期望new Sequelize返回promise,而事实并非如此。有authenticate方法可以做到这一点。

应该是:

exports.init = async () => {
let sequelize = new Sequelize(...);
await sequelize.authenticate();
return sequelize;
};

确保承诺拒绝始终得到妥善处理:

(async () => {
sequelize = await lambdaHelper.init();
contractModel = require('./models/Contract')(sequelize, Sequelize);
})().catch(console.error);

最新更新