问题:
如果我没有将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;
});
}
};
搜索并发现:
但是似乎没有任何效果,如果我们必须以其他方式返回承诺,什么是最好的方法
答案 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();
};