我可以将异步函数作为回调传递给异步函数吗?

时间:2018-10-17 21:44:18

标签: javascript reactjs

我在任何地方都找不到答案。...

我正在尝试使用setState更新应用程序的状态,但是我需要在async完成后调用setsState函数。
我可以在await的回调函数中async使用setState函数吗?

 setState({foo: bar}, async () => {await doStuff()});

还要假设这可行,我是否可以依靠setState在调用doStuff之前完成操作,并且可以依靠doStuffawait编辑吗?

2 个答案:

答案 0 :(得分:5)

是的,的确可以。异步函数的特殊之处在于它们始终返回Promises,因此对于返回值不重要的函数(例如回调),尤其是可以放心地放入异步函数,它将按预期工作。

更进一步,例如,您甚至可以将异步功能作为componentDidMountcomponentWillReceiveProps使用(但仍然不能使用render,它希望返回JSX元素,不是一个承诺)。

答案 1 :(得分:1)

setState的回调仅在状态更新时触发,因此doStaff在状态更新之前不会执行。 您可以将回调定义为异步函数,并在其内部像其他任何函数一样等待。

const setStateAsync = (newState) => {
   return new Promise((resolve) => {
       setState(newState, resolve);
   });

您可以像这样使用它,例如:

 async componentDidMount() {
    await setStateAsync(newState);
    await doStuff()
 }