我通过一堆验证器传递一个对象,需要在解析或拒绝一个承诺之前检查它们是否全部通过。
我通过我的验证器进行映射来实现这一点,验证器保存在引用每个函数的数组中var validators = [validateId, validate...]
有些验证者是承诺,有些则不是。例如,validateId就是
if(!this.id) this.error = 'an id must be provided';
console.log('this contains the error!', this);
return this; // I've also tried return Object.assign({},this);
我通过验证器运行对象,如下所示:
return new Promise(function(resolve, reject) {
Promise.all(validations.map(function(validate) {
return validate.call(view);
})).then(function(validViews){
console.log('no errors in this array of objects :(', validViews);
var validView = Object.assign({}, ...validViews);
console.log('this never has the error :(', validView);
if(validView.error) return reject({error: validView.error});
return resolve(validView);
});
});
我的期望是,如果任何验证器返回带有error属性的对象,我会拒绝,否则,返回合并的对象。
由于某种原因,validViews
数组中没有返回的对象具有error属性,即使我可以在验证器函数中看到控制台行中打印的属性;