Sequelize如何同步判断数据库连接及同步成功

发布于 2022-09-06 11:07:44 字数 831 浏览 15 评论 0

Hi,各位大佬。
是这样的,目前我希望实现通过sequelize的authenticate方法判断数据库连接是否正常,然后执行各个表的sync方法进行同步,均无问题则执行下面的逻辑代码。
但是在当前模式下,需要通过如下逻辑进行处理

sequelize.authenticate.then(function(){
    User.sync().then(function(){
        Order.sync().then(function(){
            // 大段逻辑代码
        });
    });
});

这样会显得很累赘。
我尝试通过co模块进行如下处理

co( function *() {
    try{
        // Check the database connection
        yield sequelize.authenticate();
        // Sync the tables
        yield User.sync({force: false});
        yield Order.sync({force: false});
        logger.info('Database init successfully.');

    }
    catch (e) {
        logger.error('Database init unsuccessfully!');
        process.exit(1);
    }
});
doSomething();

但是我发现,下面的逻辑代码会先行,达不到我所要的效果。
请问该如何处理目前这种情况呢?
谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情绪失控 2022-09-13 11:07:44

1、数据库连接通过配置连接池来管理,不用特意去判断连接是否正常,因为其会自动进行重连操作
2、sync同步数据库表结构只需要在开始阶段的执行一次即可(只要表结构与你的model对应,其实是不需要sync操作的),这种场景建议使用promise.all(放到app.js里执行):

(async () => {
    try {
        await Promise.all([
            User.sync({force: false}),
            Order.sync({force: false}), 
            // ...      
        ]);
    } catch (error) {
        console.log(error);
    }
})();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文