异常未在节点中的promise中捕获

时间:2016-11-30 09:05:53

标签: javascript node.js promise es6-promise

我在严格模式下使用以下代码:

ajv
    .validate(form, data)
    .then((valid) => {
        return Promise.resolve(data);
    })
    .then(createUser) //take userData as argument
    .then((user) => {
        return res.ok(user)
    })
    .catch((err) => {
        if(err instanceof Ajv.ValidationError) return res.ajv(err.errors);
        else return res.internal(err);
    });

和createUser函数:

function CustomError(error){
    this.error = error;
    this.message = 'CustomError';
    Error.captureStackTrace(this, CustomError);
};    
CustomError.prototype = Object.create(Error.prototype);
CustomError.prototype.constructor = CustomError;

const createUser = (data) => {
    return new Promise((resolve, reject) => {
        //blabla for user construction
        throw new CustomError(); //not caught
        reject(new CustomError()); //caught
   });
};

当我执行上面的代码时,如果我在promise中抛出自定义错误,catch块就无法正常工作:

  

Response.anonymous错误

,但如果我拒绝错误,那就行得很好。

这是正常的吗?还是我错过了什么?它发生在native和bluebird(节点4.3)。

我可以拒绝我自己的错误,这不是错误处理,但我试着理解为什么它不起作用。

0 个答案:

没有答案