gpt4 book ai didi

javascript - 遍历 promise

转载 作者:行者123 更新时间:2023-11-30 11:09:26 24 4
gpt4 key购买 nike

我正在尝试使用 formvalidation.io 验证 10 个表单字段。如果 10 次验证中有任何一次失败,我需要返回 false。但是,要访问验证是否通过,您需要调用一个 promise 。

var otherFacilityFields = [
"addressLine1",
"city"
];

fieldsPass = otherFacilityFields.every(function(field) {
fv.validateField(field).then(function(status) {
if (status != 'Valid') {
return false;
}
return true;
});
});

上面的代码不起作用,因为 promise 不是同步的。

最佳答案

您可以 map在你的领域创造一系列的 promise 。使用 Promise.all等待这些 promise 解决,然后然后使用every检查每个验证的响应状态。

我用过 async/await在这里,但是 Promise.all(promises).then 会同样有效。我还模拟了一个演示验证例程,因此您可以看到它的实际效果。只需将解析从“有效”更改为“无效”,然后重新运行演示即可看到 allValid 等于 false

const fv = {
validateField() {
return new Promise(resolve => {
setTimeout(() => resolve('Valid'), 1000);
});
}
}

const otherFacilityFields = ['addressLine1', 'city'];

// `map` over the fields and return a
// validation promise for each
const promises = otherFacilityFields.map(field => {
return fv.validateField(field);
});

(async () => {
try {

// await the promises to all resolve
const res = await Promise.all(promises);

// Use `every` to check the status of each validation
const allValid = res.every(status => status === 'Valid');
console.log(allValid);
} catch (e) {
console.log(e);
}
})();

关于javascript - 遍历 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54337528/

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