Как добавить некоторые задержки или что-то вроде отмены валидатора, который возвращает обещание. Я использую Antd с его компонентом Form. Мой пользовательский валидатор отправляет запрос на сервер, если имя пользователя уже существует в базе данных или нет.
docs говорит, что возвращает обещание, так что вот что я сделал.
rules={[
{ required: true, message: "Please input your username!" },
({ getFieldValue }) => ({
validator(rule, value) {
return new Promise((resolve, reject) => {
api.post("/users/check", { username: value }).then(response => {
if (response.data.exist) {
reject("Username already exists.");
} else {
resolve();
}
});
});
}
})
]}
и работает отлично, но проблема в том, что каждое нажатие клавиши отправляет запрос на сервер, но я думаю, что это не хорошо как для сервера, так и для клиента. Так что я думаю о каких-то задержках, таких как debounce или setTimeOut, но ни одна из них не работает. Я использую функцию debounce от loda sh.
return new Promise((resolve, reject) => {
debounce(() => {
api
.post("/users/check", { username: value })
.then(response => {
if (response.data.exist) {
reject("Username already exists.");
} else {
resolve();
}
});
}, 500);
Я ожидаю, что должен быть отправлен запрос сервер, но я никогда не вижу запрос к серверу.
Я думаю, что я что-то упустил или что. Надеюсь, кто-нибудь ответит.
Спасибо.