我使用此库进行验证:https://validatejs.org/#validate-async。
我有一种相当复杂的方法来验证嵌套对象对自己的架构。请参阅下面的相关代码。
基本上,它会:
除了一个问题外,它运作良好。使用默认的承诺库Promise.all
"快速失败"所以在后面的快速中间件中的catch处理程序中,它只接收第一个失败的promise的结果。但是为了让我的验证员工作,我需要结合所有失败的承诺的结果。
是否有替代承诺库(A +兼容),我可以交换到验证器,以便我捕获所有错误?
ValidationAdapter.prototype.validateCreateCtrl = function(req, res, next){
var obj = {};
var self = this;
this.logger.debug("Validating " + self.config.modelName + " create request");
self.fieldList.forEach(function(fieldName){
obj[fieldName] = req.body[fieldName];
});
self._resolveObjectRefs(obj);
this.logger.debug("Composed request object " + JSON.stringify(obj, null, 2));
var Promises = [];
Promises.push(validate.async(obj, self.constraints));
Object.keys(self.embeddedConstraints).forEach(function (key){
var value = obj[key];
var constraints = self.embeddedConstraints[key];
if (value.constructor === Array){
var i = 0;
value.forEach(function(newVal){
Promises.push(validate.async(newVal, constraints, {path: key + "[" + i + "]."}));
i++;
});
}else{
Promises.push(validate.async(value, constraints, {path: key}))
}
});
// by default it should fall through
Promise.all(Promises).then(function(){
return next();
}).catch(next);
};
答案 0 :(得分:3)
您可以使用蓝鸟的反思来实施settleAll
:
Promise.all(Promises.map(function(promise) {
return promise.reflect();
})).each(function(inspection) {
if (inspection.isFulfilled()) {
console.log("Success...");
} else {
console.error("Reject...");
}
});