Почему не выполняется второй журнал консоли?

#javascript

Вопрос:

Это и есть код

 const setError = "";

function validate() {
  return new Promise((resolve, reject) => {
    const exp = RegExp("w @example.com").test("sfsdf@gmail.com");
    console.log(exp);
    if (!exp) {
      setError = "Email Not Valid!";
    }
    console.log("The value is"   setError);
    if (setError != "") {
      reject();
    } else {
      resolve();
    }
  });
}

validate()
  .then(() => {
    console.log("Resolved");
  })
  .catch(() => {
    console.log("Rejected");
  }); 

Когда я запускаю его, я получаю следующий вывод,

 false
Rejected
 

Почему именно вторая консоль.войдите в не выполненную функцию проверки?

Комментарии:

1.Вы также должны поместить let setError="" внутри функции validate перед return оператором. Как размещено validate , не будут отправлены действительные электронные письма, потому что предыдущий звонок был по неверному адресу электронной почты.

Ответ №1:

setError не должно быть константой, когда вы пытаетесь изменить ее значение, она выдает ошибку и отклоняет обещание.

 let setError = "";
 

Ответ №2:

Поскольку вы назначаете const setError , это вызывает ошибку во время выполнения и останавливает выполнение функции.

const не может быть повторно назначен после инициализации. Создание этого let решает проблему

 let setError = "";

function validate() {
  return new Promise((resolve, reject) => {
    const exp = RegExp("w @example.com").test("sfsdf@gmail.com");
    console.log(exp);
    if (!exp) {
      setError = "Email Not Valid!";
    }
    console.log("The value is"   setError);
    if (setError != "") {
      reject();
    } else {
      resolve();
    }
  });
}

validate()
  .then(() => {
    console.log("Resolved");
  })
  .catch(() => {
    console.log("Rejected");
  }); 

Ответ №3:

Второе console.log не срабатывает, потому setError что является постоянным и не может быть изменено. Изменение const на let должно генерировать результат, который вы ожидаете:

 false
The value isEmail Not Valid!
Rejected
 

Ответ №4:

Причина , по которой вы не видите второго console.log , заключается в том, что setError это a const , поэтому, как только вы попытаетесь присвоить ему новое значение, он выдаст ошибку и перейдет в catch блок.

Попробуйте это вместо этого:

 var setError = "";