現在、私は少しフォームを検証しています。 postの助けを借りて、私はそれぞれのバリデーションを順次行いました。配列の値がfalseの場合に約束を破る
バリデーションの配列に偽の値が表示されたらすぐに約束を破る必要はなく、配列内の真偽値に関係なく完了する必要があります。どのように私は今持っているものに基づいてこのコンセプトを組み込むことができますか? MDNによると
var validations = [validatePassword, validateName, validateAddress, ...];
$continueButton.on('click', function() {
subscribe().then(function() {
// Do something
}, function() {
// Show error
});
});
function subscribe() {
var promises = validations.map(function(validation) {
return validation();
});
return Promise.all(promises);
}
function validatePassword() {
var password = $password.val();
var format = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])[^+&\n]{8,}$/;
return validateInput(format.test(password), $password);
}
function validateAddress() {
return new Promise(function (resolve, reject) {
$.ajax({
type: 'POST',
url: '/address/validate',
data: $form.serialize(),
dataType: 'json',
success: function(response) {
var hasValidAddres = response.Data === 200;
validateInput(hasValidAddres, $address);
hasValidAddres ? resolve() : reject();
},
error: function() {
// Show error
}
});
});
}
function validateInput(validation, $input) {
if (validation) {
$input.removeClass('invalid');
return true;
} else {
markAsInvalid($input);
// Was originally return false
return Promise.reject('Example Error');
}
}
function markAsInvalid($input) {
$input.addClass('invalid');
}
あなたが「あなたのバリデータの1つでエラーで拒否すべきです」と言うとき、私は 'validations'配列内の1つのバリデーション関数で' return Promise.reject(err); 'を書くだけですか? –
プロミスチェーンを拒否するには、検証が失敗したときに、すべての検証関数にこのコードを追加し、エラーを拒否する必要があります。 – alexmac
私は 'Uncaught(promise)エラー 'を表示しています –