как остановить функцию, если запрос на выборку не удался - PullRequest
0 голосов
/ 09 июля 2020

Я создаю форму электронной почты с помощью Google Captcha v3.

Я хочу, чтобы, если оценка меньше 1, остальная часть функции (запроса) должна завершиться.

но проблема в том, что если я добавлю оператор return в свой запрос на выборку, он просто выйдет из функции .then() и не остановит запрос.

Вот код:

app.post(
  "/mail",
  (req, res) => {
    const url = `https://www.google.com/recaptcha/api/siteverify?secret=${process.env.SECRET_KEY}&response=${req.body.token}`;
    fetch(url, {
      method: "post",
    })
      .then((response) => response.json())
      .then((google_response) => {
        console.log(google_response);

        if ((google_response.success = false || google_response.score < 1)) {
          console.log("ROBOT ALERT");

          res.status(422).json({
            captcha: "Robot verification failed. Try again later",
          });
          return; //------------here I want to stop the continuation of the request----
        }
        return;
      })
      .catch((error) => {
        console.log(error);

        res.json({ captcha: "An unknown error occurred. Try again later" });
      });
    // Finds the validation errors in this request and wraps them in an object with handy functions
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      console.log(errors);

      return res.status(422).json({ errors: errors.array() });
    }
   

//If everything is ok then end request here.
    res.json({ success: true });
  }
})


Ответы [ 2 ]

1 голос
/ 11 июля 2020

Просто сделай все внутри then:

fetch(url, options).then(response => response.json().then(data => {
  // do everything here
})).catch(e => {
  // handle error
})
  
0 голосов
/ 11 июля 2020

Вы можете использовать return внутри оператора if, чтобы остановить выполнение функции после срабатывания оператора if:

app.post("/mail", (req, res) => {
  fetch(url, options)
    .then((response) => response.json())
    .then((googleResponse) => {
      if ((google_response.success = false || google_response.score < 1)) {
        console.log("ROBOT ALERT");
        return res.status(404).send({ captcha: "Robot verification failed. Try again later" });
        // Should stop here if condition is triggered
      }
      // Continue here if the condition is not triggered
    });
});
...