Redux Form:使用异步函数从asyncValidate返回promise

时间:2018-03-29 19:00:11

标签: reactjs redux async-await

我想使用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的一部分错误?任何帮助将不胜感激。

3 个答案:

答案 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现在正在包装它,它会返回去抖动的值,这似乎不是一个有希望的值。

这个答案谈论的是去除遗嘱的辩护......

Debounce function implemented with promises

答案 2 :(得分:0)

您可以通过添加asyncBlurFields:[]之类的

来防止此错误
idToken