gpt4 book ai didi

javascript - Promise 在真/假值数组中失败

转载 作者:行者123 更新时间:2023-12-03 06:59:29 24 4
gpt4 key购买 nike

我有一系列验证检查,其中一个恰好使用 ajax 来检查地址。在提交表单之前,我需要整个数组返回 true 并按顺序触发。我尝试使用 promise 但无济于事。

问题来了。如果我输入错误的地址或将输入留空,则它不会提交表单(好)。但是,当我实际输入有效地址时,尽管 validations 数组中的其他验证具有错误值,但表单还是会提交。我做错了什么?

var validations = [validateInputPresence, validatePassword, validateAddress];

$continueButton.on('click', function() {
toggleSpinner();

subscribe().then(function() {
submitForm(); // This is firing even when some values are false in the array
}, function() {
toggleSpinner();
});
});

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));
}

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);

hasValidAddres ? resolve() : reject();
},
error: function() {
toggleSpinner();
}
});
});
}

function validateInput(validation) {
if (validation) {
return true;
} else {
return false;
}
}

最佳答案

主要问题是您没有在 validateInput() 函数中返回 Promise。您不能通过在其函数之一中返回 false 来拒绝 Promise.all 返回的 promise 。 Read more about Promise.all ,以下引用摘自MDN

If something passed in the iterable array is not a promise, it's converted to one by Promise.resolve.

所以实际上任何事情,除了 Promise 都会被视为已解决。

您应该做的是编写 validateInput 函数来返回一个 promise 。

function validateInput(validation) {
return new Promise(function(resolve, reject) {
if (validation) {
resolve();
} else {
reject();
}
});
}

关于javascript - Promise 在真/假值数组中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com