使用await setState()是否正确?

MRa*_*mon 5 javascript setstate async-await reactjs

我的函数看起来像这样:

this.setState(prevState => ({
 time : prevState.time + 1
}), function() {
 doSomethingWithNewState(this.state.time)
})
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用等待是否正确?像这样:

await this.setState(prevState => ({
 time : prevState.time + 1
}));
doSomethingWithNewState(this.state.time);
Run Code Online (Sandbox Code Playgroud)

Ana*_*nas 10

没有this.setState不返回的承诺.

所以你不能在这种情况下使用await.您需要使用回调.

  • wait 不适用于回调。你可以测试一下。 (2认同)
  • @Anas wait 工作正常,请检查此处 https://next.plnkr.co/edit/0FqhaCGmtV0xkgAx?open=Hello.js&deferRun=1 (2认同)

Dav*_*han 5

this.setState由于已经说明的原因,您不能等待。但是您可以轻松编写自己的可等待 setState 函数:

promisedSetState = (newState) => new Promise(resolve => this.setState(newState, resolve));
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话

await pwomisedSetState({ someState: true });
Run Code Online (Sandbox Code Playgroud)