Чтобы сохранить заявки, приведенный ниже код использует 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);
});
})
})