gpt4 book ai didi

mysql - sequelize - 无法读取未定义的属性捕获

转载 作者:行者123 更新时间:2023-11-29 11:45:23 26 4
gpt4 key购买 nike

我在我的项目中将sequelize与mysql一起使用。当前的用例是用“roles_master”和一些默认角色填充表。

函数 createDefaultRoles 实现检查:

  • 如果表中有行
  • 如果是,并且强制为 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”]
    1. 已成功创建用户角色。

最后,由于上述错误,函数失败了。我尝试正确匹配所有 .then() 和 .catch() promise 。他们看起来很好。

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

最佳答案

我猜问题出在 block 上

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() 返回未定义,因此您无法在其上附加“catch”。如果你用 . 替换 .done ,那么它应该按预期工作

关于mysql - sequelize - 无法读取未定义的属性捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35031843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com