保证不检查价值

时间:2018-08-12 03:28:28

标签: javascript jquery

您好,我尝试使用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(() => {});
 });
});

1 个答案:

答案 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 ,您可以重新检查电子邮件输入的值。