Bluebird.js自定义错误捕获功能,不适用于第一个承诺?

时间:2014-07-15 11:22:13

标签: javascript error-handling promise bluebird

我正在尝试使用Bluebird.js的自定义错误处理程序。

在下面的示例中,调用了catch-all处理程序,而不是MyCustomError处理程序,但是当我将拒绝移动到然后函数(并解析了firstPromise ...)时,MyCustomError处理程序叫做。 这是为什么?弄错了?感谢。

var Promise = require('bluebird'),
debug = require('debug')('main');

firstPromise()
    .then(function (value) {
      debug(value);
    })
    .catch(MyCustomError, function (err) {
      debug('from MyCustomError catch: ' + err.message);
    })
    .catch(function (err) {
      debug('From catch all: ' + err.message);
    });

/*
 * Promise returning function.
 * */
function firstPromise() {
  return new Promise(function (resolve, reject) {
    reject(new MyCustomError('error from firstPromise'));
  });
}
/*
 *  Custom Error
 * */
function MyCustomError(message) {
  this.message = message;
  this.name = "MyCustomError";
  Error.captureStackTrace(this, MyCustomError);
}
MyCustomError.prototype = Object.create(Error.prototype);
MyCustomError.prototype.constructor = MyCustomError;

1 个答案:

答案 0 :(得分:4)

在其他任何事情之前声明错误类,它将起作用(原型作业不会被提升)