处理我有一个非常基本的迁移代码看起来像这样。它删除表格,创建表格,并用一些数据对其进行种子处理。正确与错误的NodeJS /快速
this.knex.schema.dropTable(this.tableName)
.catch((err) => console.log(err))
.then(() => {
this.knex.schema.createTable(this.tableName, function(table) {
table.increments("id").primary();
table.string("name");
table.integer("parent_id").unsigned().default(0);
})
.catch((err) => console.log(err))
.then(() => {
this.categories.forEach((category) => {
Category.create(category)
.catch((err) => console.log(err))
.then((category) => console.log(category.get("name") + " seeded."))
});
});
});
您可能注意到,代码上有3x .catch((err) => console.log(err))
链。
现在我有Bugsnag集成到我的应用程序,我想确保我正确登录所有异常/上Bugsnag错误,所以我可以修复所有的错误。但是,现在我所能做的就是将它们登录到控制台中。更糟糕的是,我重复自己并重复每个catch
块的逻辑。
我在考虑做这样的事情:
.catch((err) => ErrorHandler.add(err))
class ErrorHandler {
add(err) {
// Notify Bugsnag
// Log it to console
}
}
这abrings另一个问题。如果我忘记添加catch
方法,那么它将不起作用。
想过做这样的事情,太:
// Change exception behaviour so whenever they are called, they raise an `onException` event
app.listen("onException", (err) => {
// Notify Bugsnag
// Log error to console
});
这样我可以捕获所有的错误和干我的代码,但我不知道,如果节点支持挂钩例外。
你会在我的情况,我应该采取什么样的方式做什么?我想确保所有错误都正确发送到Bugsnag。
感谢您的惊人答案。如果createTable不返回承诺,我如何转换它以返回承诺?此外,蓝鸟究竟是什么,它如何理解数组映射的完成?现在它只是一堆不同的'保存(...),然后(...)'承诺。我想我很快就必须阅读有关承诺。你有什么建议吗? – Aris
你的猜测是正确的,你应该首先熟悉承诺,这真的可以帮助:https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html – Srle
我收获了它。它回答了我的大部分问题。但是,我不知道我怎么能promisify这一个:'this.knex.schema.createTable'。另外,未来如果我需要提出一些不能兑现承诺的东西,我该怎么做?重写该方法并返回'Promise.something()'? – Aris