我在严格模式下使用以下代码:
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)。
我可以拒绝我自己的错误,这不是错误处理,但我试着理解为什么它不起作用。