Node.js 如何异步返回sequelize实例?

Node.js 如何异步返回sequelize实例?,node.js,sequelize.js,Node.js,Sequelize.js,我似乎无法正确地将service.js文件中的sequelize对象传递到index.jssequelize变量 有什么不对劲的地方吗 index.js let sequelize; let contractModel; (async () => { sequelize = await lambdaHelper.init(); //The issue is here contractModel = require('./models/Contract')(sequeliz

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

有什么不对劲的地方吗

index.js

let sequelize;
let contractModel;

(async () => {
    sequelize = await lambdaHelper.init(); //The issue is here
    contractModel = require('./models/Contract')(sequelize, Sequelize); 
})();
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;
};
service.js

let sequelize;
let contractModel;

(async () => {
    sequelize = await lambdaHelper.init(); //The issue is here
    contractModel = require('./models/Contract')(sequelize, Sequelize); 
})();
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
    }

});
结果

let sequelize;
let contractModel;

(async () => {
    sequelize = await lambdaHelper.init(); //The issue is here
    contractModel = require('./models/Contract')(sequelize, Sequelize); 
})();
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;
};
***********在*******(节点:66912)之前未处理的PromiserEjectionWarning:未处理的承诺拒绝 (拒绝id:1):TypeError:无法读取的属性“findAll” 未定义(节点:66912)[DEP0018]弃用警告:未处理的承诺 不赞成拒绝。在未来,承诺拒绝 not handled将以非零出口终止Node.js进程 代码

结果2

***********在*******(节点:66540)之前未处理的PromiserEjectionWarning:未处理的承诺拒绝 (拒绝id:1):TypeError:无法读取的属性“findAll” 未定义(节点:66540)[DEP0018]弃用警告:未处理的承诺 不赞成拒绝。在未来,承诺拒绝 not handled将以非零出口终止Node.js进程 代码。正在执行(默认):选择1+1作为结果类型错误:无法读取 未定义的属性“define” at module.exports at

wait new Sequelize(…)
在上面的代码中,期望
new Sequelize
返回承诺,但事实并非如此。有一种方法可以做到这一点

应该是:

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);

请参见OP2中的结果2添加
验证
捕获
后是否会发生这种情况?导致问题的代码未出现在OP.1中的建议错误之后change@Rod刚刚注意到
authenticate
不应该返回连接,更新了答案。不确定它是否会影响你的问题。很高兴它起到了作用。