如何使用async / await重构此函数?

时间:2017-10-15 21:44:01

标签: javascript node.js async-await

我对async / await很新,并且想知道,用async / await重构下面的代码的最佳方法是什么?

export const createUser = (values, history) => {
  return dispatch => {
    axios.post('/api/signup', values)
      .then(res => {
        console.log('result', res);
      }, rej => {
        console.log('rejection', rej);
      });
  }
}

当只向.then提供一个参数时,这对我来说非常简单,但是如果你有两个这样的参数会发生什么呢?

2 个答案:

答案 0 :(得分:3)

.then的两个参数只是成功和错误回调。您也可以将其写为.then(res => {}).catch(rej => {})

基本上,您可以将await的结果视为.then回调。每当您等待承诺的结果时,无论您是否使用承诺,请使用await.对于任何错误,请使用通常的try / catch

return async () => {
  try {
    const res = await axios.post('/api/signup', values);
    console.log('result', res);
  }
  catch (rej) {
    console.log('rejection', rej);
  }
}

要记住的一件事是async函数总是返回Promise,因此必须编写调用代码来解释它。

我写了一篇关于async/await的博客文章(免责声明,是写了这篇文章)。1

答案 1 :(得分:3)

以下是如何操作,使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function作为参考:

 const f = (values, history) => {
    return async function createUser( dispatch ) {
        try {
           const res = await axios.post('/api/signup', values);
           console.log('result', res);
        } catch(e) {
           console.log('reject', e);
        }         
    };
 }