Skip to content

Commit ec8d637

Browse files
authored
Merge pull request #6 from alibaba-fusion/develop
Release `validatePromise` fix
2 parents 191f5d7 + 6392d53 commit ec8d637

11 files changed

+2003
-996
lines changed

src/index.js

+5-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class Schema {
4444
* @returns {null | Promise}
4545
* - { null } - if using callbacks
4646
* - { Promise }
47-
* - { null } - if no rules or no errors
47+
* - { errors: null } - if no rules or no errors
4848
* - { errors: Array, fields: Object } - errors from validation and fields that have errors
4949
*/
5050
validate(source, callback) {
@@ -138,18 +138,18 @@ class Schema {
138138
*
139139
* @param {Object} source - map of field names and values to use in validation
140140
* @returns {Promise}
141-
* - {null} if no rules or no errors
141+
* - { errors: null } if no rules or no errors
142142
* - { errors: Array, fields: Object } - errors from validation and fields that have errors
143143
*/
144144
async validatePromise(source) {
145145
if (!this._rules || Object.keys(this._rules).length === 0) {
146-
return Promise.resolve(null);
146+
return Promise.resolve({ errors: null });
147147
}
148148

149149
const series = serializeRules(source, this._rules);
150150

151151
if (Object.keys(series).length === 0) {
152-
return Promise.resolve(null);
152+
return Promise.resolve({ errors: null });
153153
}
154154

155155
const results = await asyncMapPromise(
@@ -165,6 +165,7 @@ class Schema {
165165
errors = await rule.validator(
166166
rule,
167167
data.value,
168+
null,
168169
this._options
169170
);
170171
} catch (error) {
@@ -188,10 +189,6 @@ class Schema {
188189
}
189190
);
190191

191-
if (!results) {
192-
return { errors: results };
193-
}
194-
195192
return processErrorResults(results);
196193
}
197194
}

src/util.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ export function serializeRules(source, rules) {
182182
* @param {Array} results errors from running validation
183183
* @returns {Object} { errors: Array, fields: Object }
184184
*/
185-
export function processErrorResults(results) {
185+
export function processErrorResults(results = []) {
186186
let errors = [];
187187
let fields = {};
188188

src/validator.js

+17-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import rules from './rules/';
33

44
/**
55
* {required, format} => format; {required} => required
6+
* If a promise is wanted from the validator, either return a promise from the callback,
7+
* or do not pass a callback
8+
*
69
* @param {function} validator [description]
710
* @param {string} ruleType [description]
811
* @return {function} [description]
@@ -17,16 +20,26 @@ export function validateFunc(validator, ruleType) {
1720
rules.required(rule, value, errors, options);
1821
if (errors.length > 0) {
1922
if ('required' in rule) {
20-
cb(errors);
23+
if (cb) {
24+
return cb(errors);
25+
} else {
26+
return Promise.reject(errors);
27+
}
28+
} else if (cb) {
29+
return cb([]); //忽略空数据的判断
2130
} else {
22-
cb([]); //忽略空数据的判断
31+
return Promise.resolve(null);
2332
}
24-
return;
2533
}
2634
}
2735

2836
validator(rule, value, errors, options);
29-
cb(errors);
37+
if (cb) {
38+
return cb(errors);
39+
}
40+
if (Promise) {
41+
return Promise.resolve(errors);
42+
}
3043
};
3144
}
3245

0 commit comments

Comments
 (0)