Node.js 将异步/等待与Bluebird';s'catch'过滤变体
蓝知更鸟将其Node.js 将异步/等待与Bluebird';s'catch'过滤变体,node.js,promise,async-await,sequelize.js,bluebird,Node.js,Promise,Async Await,Sequelize.js,Bluebird,蓝知更鸟将其承诺捕获的猴子补丁描述为具有“过滤变体”,描述如下: 这是对.catch的扩展,在Java或C#等语言中更像catch子句。您可以指定一些符合此捕获处理程序条件的错误构造函数,而不是手动检查instanceof或.name==“SomeError”。首先遇到的具有指定的合格构造函数的catch处理程序将被调用 给出的例子是: somePromise.then(function() { return a.b.c.d(); }).catch(TypeError, function
承诺
捕获的猴子补丁描述为具有“过滤变体”,描述如下:
这是对.catch的扩展,在Java或C#等语言中更像catch子句。您可以指定一些符合此捕获处理程序条件的错误构造函数,而不是手动检查instanceof或.name==“SomeError”。首先遇到的具有指定的合格构造函数的catch处理程序将被调用
给出的例子是:
somePromise.then(function() {
return a.b.c.d();
}).catch(TypeError, function(e) {
//If it is a TypeError, will end up here because
//it is a type error to reference property of undefined
}).catch(ReferenceError, function(e) {
//Will end up here if a was never declared at all
}).catch(function(e) {
//Generic catch-the rest, error wasn't TypeError nor
//ReferenceError
});
在具有Bluebird依赖项并使用Bluebird promises的中,捕获查询错误(如创建新记录时的验证错误)的建议方法(据我所知)是使用Bluebird filtered变体catch
下面是我捕获续集的示例。ValidationError:
models.User.create(params).then(function(user) {
// do something with user
}).catch(Sequelize.ValidationError, function (err) {
var error = err.errors[0],
message = error ? error.message : "Invalid parameters.";
return res.send(422, { message : message });
}).catch(function(err) {
next(err);
});
我喜欢这个。它允许我以不同的方式处理一个验证错误(用422
和该错误进行响应),而不是其他我可能希望冒泡到用500
响应的常规错误捕捉器的常规错误
不幸的是,据我所知,如果我想在ES6中使用async/Wait,我将无法做到这一点
try {
var user = await models.User.create(params);
// do something with user
} catch (err) {
next(err);
}
是否有任何方法或节点社区中常见的任何模式(我有点新)可以做一些与标准的基于承诺的Sequelize/Bluebird方法大致相似的事情来使用async/await捕获和处理特定类型的错误?我认为没有任何方法可以修补
try/catch
行为(就像捕获一样)()
所以我认为没有任何方法可以改变catch
的行为。