sequelize - 无法读取未定义

时间:2016-01-27 08:09:22

标签: mysql sequelize.js bluebird

我在我的项目中使用sequelize和mysql。当前的用例是关于使用带有一些默认角色的'roles_master'填充表。

createDefaultRoles函数实现检查:

  • 如果表格中有行
  • 如果是,并且force为true,则删除现有行并插入新行
  • 如果表为空,则直接插入新行

我的代码如下......

/**
 *  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()承诺。他们似乎很好。

非常感谢您解决此问题的任何帮助。

1 个答案:

答案 0 :(得分: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,因此无法附加' catch'就此而言。 如果用.then替换.done,它应该按预期工作