我在我的项目中使用sequelize和mysql。当前的用例是关于使用带有一些默认角色的'roles_master'填充表。
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);
});
}
问题是,它部分起作用。虽然,它能够删除现有的行并添加新的行,但它也会抛出一个异常,它被捕获并打印如下。
最后,由于上述错误,函数失败。我已经尝试正确匹配所有.then()和.catch()承诺。他们似乎很好。
非常感谢您解决此问题的任何帮助。
答案 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,它应该按预期工作