您好,我尝试使用Promise检查字段值,但是在Promise函数中,它似乎无法检查电子邮件输入值。它会给出空白结果吗?
<form>
<label for="Email">Email</label>
<br>
<input type="text" id="Form_email">
<div id="Email_error"></div>
</form>
$(function() {
let Email = $("#Form_email");
let Email_valid_field = $("#Email_error");
//promise
let myFirstPromise = new Promise((resolve, reject) => {
setTimeout(function() {
if (Email.val() === "abc@yahoo.com") {
reject();
console.log("reject");
} else {
resolve();
}
}, 250);
});
Email.focus(function() {}).blur(function() {
myFirstPromise
.then(
result => {
Email_valid_field.append("<p>Email Available</p>");
},
reject => {
Email_valid_field.append("<p>Email Is Taken</p>");
}
)
.catch(() => {});
});
});
答案 0 :(得分:0)
使用您的代码:myFirstPromise
是一个承诺,并且仅运行一次。因此,如果您在解决问题后进行检查(可以console.log(myFirstPromise)
)。
您必须将其包装在这样的函数中:
$(function () {
let Email_valid_field = $("#Email_error");
let Email = $("#Form_email");
//promise
function checkValidEmail() {
return new Promise((resolve, reject) => {
setTimeout(function () {
let Email = $("#Form_email");
if (Email.val() === "abc@yahoo.com") {
reject();
console.log("reject");
} else {
resolve();
}
}, 250);
});
}
Email.focus(function () {
}).blur(function () {
checkValidEmail()
.then(
result => {
Email_valid_field.append("<p>Email Available</p>");
},
reject => {
Email_valid_field.append("<p>Email Is Taken</p>");
}
)
.catch(() => {
});
});
});
每次检查后,功能checkValidEmail
始终返回一个新的 Promise ,您可以重新检查电子邮件输入的值。