我的功能如下:
this.setState(prevState => ({
time : prevState.time + 1
}), function() {
doSomethingWithNewState(this.state.time)
})
在这种情况下使用等待是否正确?像这样:
await this.setState(prevState => ({
time : prevState.time + 1
}));
doSomethingWithNewState(this.state.time);
答案 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 });