Добавление задержки для пользовательского правила валидатора antd - PullRequest
1 голос
/ 04 марта 2020

Как добавить некоторые задержки или что-то вроде отмены валидатора, который возвращает обещание. Я использую 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);

Я ожидаю, что должен быть отправлен запрос сервер, но я никогда не вижу запрос к серверу.

Я думаю, что я что-то упустил или что. Надеюсь, кто-нибудь ответит.

Спасибо.

...