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
的行为。