Yup - асинхронная проверка после setTimeout - PullRequest
0 голосов
/ 29 октября 2019

Чтобы сохранить заявки, приведенный ниже код использует setTimeout после того, как пользователь введет значение. Если вводится новый, тайм-аут отменяется.

Я хотел бы подтвердить правильность подхода, приведенного ниже, поскольку, когда тайм-аут сброшен, он не возвращает обещание, как ожидалось функцией асинхронной проверки ». тест ".

let timeout = null;
const validationSchema = Yup.object({
  name: Yup.string("Enter your name").required("Name is required"),
    .test("checkDuplUsername", "Username already taken", function(value) {
      clearTimeout(timeout);
      if (!value) return true;

      return new Promise((resolve, reject) => {
        timeout = setTimeout(async () => {

          let uname = value.trim().toLowerCase();
          let resp = await fetch('/check_username/' + value;

          resolve(resp.result.length === 0);
        }, 500);
      });
    })
})
...