2016-01-27 65 views
0

我在我的項目中使用了與mysql的sequelize。當前的用例是關於使用一些默認角色填充'roles_master'的表。續集 - 無法讀取未定義的屬性catch

功能createDefaultRoles實現檢查:

  • 如果在表
  • 如果是行和力量是真實的,刪除現有行並插入新行
  • 如果表爲空,直接插入新行

我的代碼如下...

/** 
* Creates a pre-defined set of roles 
* If roles table exists and already contains data, 
* this function simply returns, without creating any roles. 
* The list of roles is defined in the file "ecp_db_defaults.js" 
* 
* @param force -- boolean flag to indicate whether to drop existng roles and recreate afresh 
**/ 
function createDefaultRoles(force, callback) { 
    console.log("Executing createDefaultRoles..."); 
    db.Role.count().then(function(result) { 
    if (result>0) { 
     if (force) { 
     console.log("Emptying the roles table..."); 
     db.Role.destroy({force:true, where: {}}).then(function() { 
      db.Role.bulkCreate(dbConfig.roles).done(function() { 
      console.log("1. Successfully created user roles."); 
      if (callback) return callback(null); else return; 
      }).catch(function(e){ 
      console.log("Error while creating roles...", e); 
      if (callback) return callback(e); 
      }); 
     }).catch(function(e) { 
      console.error("Error while destroying roles table.", e); 
      return (callback)?callback(e):e; 
     }); 
     } 
     //if (callback) return callback(null); else return; 
    } else { 
     db.Role.bulkCreate(dbConfig.roles).done(function(){ 
     console.log("2. Successfully created user roles."); 
     if (callback) return callback(null); 
     }) 
    } 
    }).catch(function(e){ 
    console.error("Error while querying roles table.", e); 
    if (callback) return callback(e); 
    }); 
} 

問題是,它部分工作。雖然,它能夠刪除現有行和添加新的,它也拋出一個捕獲並如下印刷例外..

  • 執行createDefaultRoles ...
  • 清空角色表... 銷燬角色表時出錯。 [TypeError:無法讀取屬性'catch'of undefined]
    1. 成功創建用戶角色。

最後,函數失敗,因爲上述錯誤的。我試着正確匹配所有.then()和.catch()promise。他們似乎很好。

任何幫助解決這個問題,高度讚賞。

回答

1

我想這個問題是塊

db.Role.bulkCreate(dbConfig.roles).done(function() { 
      console.log("1. Successfully created user roles."); 
      if (callback) return callback(null); else return; 
      }).catch(function(e){ 
      console.log("Error while creating roles...", e); 
      if (callback) return callback(e); 
      }); 

由於.done()返回undefined你不能追加一個「抓」這一點。 如果使用。替換.done,它應該按預期工作

相關問題