鍍金池/ 問答/數(shù)據(jù)庫  HTML/ Sequelize如何同步判斷數(shù)據(jù)庫連接及同步成功

Sequelize如何同步判斷數(shù)據(jù)庫連接及同步成功

Hi,各位大佬。
是這樣的,目前我希望實現(xiàn)通過sequelize的authenticate方法判斷數(shù)據(jù)庫連接是否正常,然后執(zhí)行各個表的sync方法進行同步,均無問題則執(zhí)行下面的邏輯代碼。
但是在當(dāng)前模式下,需要通過如下邏輯進行處理

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

但是我發(fā)現(xiàn),下面的邏輯代碼會先行,達不到我所要的效果。
請問該如何處理目前這種情況呢?
謝謝!

回答
編輯回答
空白格

1、數(shù)據(jù)庫連接通過配置連接池來管理,不用特意去判斷連接是否正常,因為其會自動進行重連操作
2、sync同步數(shù)據(jù)庫表結(jié)構(gòu)只需要在開始階段的執(zhí)行一次即可(只要表結(jié)構(gòu)與你的model對應(yīng),其實是不需要sync操作的),這種場景建議使用promise.all(放到app.js里執(zhí)行):

(async () => {
    try {
        await Promise.all([
            User.sync({force: false}),
            Order.sync({force: false}), 
            // ...      
        ]);
    } catch (error) {
        console.log(error);
    }
})();
2017年5月14日 14:07