使用await setState()是否正确?

时间:2018-08-22 14:06:32

标签: javascript reactjs async-await setstate

我的功能如下:

this.setState(prevState => ({
 time : prevState.time + 1
}), function() {
 doSomethingWithNewState(this.state.time)
})

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

await this.setState(prevState => ({
 time : prevState.time + 1
}));
doSomethingWithNewState(this.state.time);

4 个答案:

答案 0 :(得分:8)

没有SELECT a.*, b.ID AS ID_OUTLET FROM nomor_logo a LEFT JOIN outlet b ON b.NOMOR_LOGO_WARALABA = a.ID WHERE b.ID IS NULL AND a.ID != b.NOMOR_LOGO_WARALABA 不会返回承诺。

因此,在这种情况下,您不能使用await。您需要使用回调。

答案 1 :(得分:2)

如前所述,setState()不会返回Promise,因此您无法按预期将其与await一起使用。 (尽管您也可以await同步代码。)

当说setState()异步时,意味着setState()效果可能在以后发生。

此外,在回调函数中读取this.state时,会在回调执行的特定时间为您提供组件的状态,而不完全可以预料,因为所有回调函数在执行 之后被称为 ,因此执行了一批setState()调用。 (See this issue)。

答案 2 :(得分:0)

setState需要回叫吗?不确定为什么第一个示例会出现问题

https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296

答案 3 :(得分:0)

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

promisedSetState = (newState) => new Promise(resolve => this.setState(newState, resolve));

现在您可以致电

await pwomisedSetState({ someState: true });