我想使用ES2017 async并等待语法从Redux Form中的验证函数返回一个promise。我目前的功能如下:
export const asyncValidateUsername = values => {
return async () => {
if (!values.username) return;
const data = await axios.get(`/validate/${values.username}`);
if (data) {
throw { username: `Username ${values.username} is already taken.`};
} else {
return { username: 'Valid username.' }
}
}
}
然后我用lodash的去抖功能包装这个函数:
const asyncValidate = _.debounce(asyncValidateUsername, 200);
我在使用此代码时遇到以下错误:
Uncaught Error: asyncValidate function passed to reduxForm must return a promise
我认为异步函数隐式返回一个promise。我的代码中是否有错误,或者这是Redux Form的一部分错误?任何帮助将不胜感激。
答案 0 :(得分:0)
Asycn函数返回一个你所说的promise,但你的顶级函数不是异步函数,它返回一个异步函数。我对Redux Form不太熟悉,但你可以尝试这样:
export const asyncValidateUsername = async values => {
if (!values.username) return;
const data = await axios.get(`/validate/${values.username}`);
if (data) {
throw { username: `Username ${values.username} is already taken.`};
} else {
return { username: 'Valid username.' }
}
}
答案 1 :(得分:0)
看起来,因为_.debouce现在正在包装它,它会返回去抖动的值,这似乎不是一个有希望的值。
这个答案谈论的是去除遗嘱的辩护......
答案 2 :(得分:0)
您可以通过添加asyncBlurFields:[]之类的
来防止此错误idToken