feat(Form): stop validation when a rule fails

This commit is contained in:
陈嘉涵 2020-02-12 11:37:10 +08:00
parent 48d2f64aba
commit dd11f17693

View File

@ -151,36 +151,46 @@ export default createComponent({
resolve(); resolve();
} }
Promise.all( let message;
this.rules.map(rule => {
this.rules
.reduce(
(promise, rule) =>
promise.then(() => {
if (message) {
return;
}
if (rule.required && this.formValueEmpty) { if (rule.required && this.formValueEmpty) {
return Promise.resolve(rule.message); ({ message } = rule);
return;
} }
if (rule.validator) { if (rule.validator) {
const returnVal = rule.validator(this.formValue); const returnVal = rule.validator(this.formValue);
if (returnVal === false) { if (returnVal === false) {
return Promise.resolve(rule.message); ({ message } = rule);
return;
} }
if (isPromise(returnVal)) { if (isPromise(returnVal)) {
return returnVal.then( return returnVal.then(result => {
result => result === false && rule.message if (result === false) {
); ({ message } = rule);
}
});
} }
} }
}),
return Promise.resolve(); Promise.resolve()
}) )
).then(messages => { .then(() => {
messages = messages.filter(item => item); if (message) {
this.validateMessage = message;
if (messages.length) {
this.validateMessage = messages[0];
resolve({ resolve({
name: this.name, name: this.name,
messages, message,
}); });
} else { } else {
resolve(); resolve();