可选字段上的Redux形式异步验证

时间:2020-06-30 05:23:01

标签: reactjs redux redux-form

问题:

如果我没有将asyncValidate函数的承诺传递给asyncValidation.js:8 Uncaught Error: asyncValidate function passed to reduxForm must return a promise,那么它也会失败,我该如何访问传递给asyncValidat函数的组件的道具 failed validation image

我的情况:

该表单具有选择固定URL的选项,然后,如果要输入自定义URL,则可以选择自定义复选框,然后在文本字段中输入URL。我需要验证输入的自定义URL。

仅当用户选择输入自定义URL时,此字段才有一个值。当您在我的自定义URL文本字段中发送值时,它可以正常工作。当我不向字段发送值时,提交失败并出现上述错误

异步验证程序的代码:

const asyncValidate = values => {
  const { custom_url } = values;
  const noFeedError = { custom_url: "No feeds found" };
  const fetchFailedError = { custom_url: "Fetch failed, try again" };

  if (custom_url && custom_url !== "") {
    return fetchOnlineFeeds(custom_url) //fetches if URL is valid fails with 503 
      .then(feedResult => {
        if (feedResult.error) {
          throw noFeedError;
        }
      })
      .catch(() => {
        throw fetchFailedError;
      });
  }
};

搜索并发现:

但是似乎没有任何效果,如果我们必须以其他方式返回承诺,什么是最好的方法

1 个答案:

答案 0 :(得分:1)

问题,我认为您正在if之外返回未定义的内容,请尝试重构以任一方式返回promise

在您的if之后仅返回Promise.resolve(),我想也可以return new Promise()

const asyncValidate = values => {
  const { custom_url } = values;
  const noFeedError = { custom_url: "No feeds found" };
  const fetchFailedError = { custom_url: "Fetch failed, try again" };

  if (custom_url && custom_url !== "") {
    return fetchOnlineFeeds(custom_url) //fetches if URL is valid fails with 503 
      .then(feedResult => {
        if (feedResult.error) {
          throw noFeedError;
        }
      })
      .catch(() => {
        throw fetchFailedError;
      });
  }
  return Promise.resolve();
};