setState通常不与promises一起使用,因为很少有这种需求。如果在状态更新(
fetchRooms)之后调用的方法依赖于更新的状态(
roomId),则它可以通过其他方式(例如,作为参数)访问它。
setState使用回调并且不返回承诺。由于很少需要这样做,因此创建未使用的承诺会导致开销。
为了兑现诺言,
setState可以按照此答案的建议进行承诺。
发布的代码可以使用,
await因为它是hack。
await...是的语法糖
Promise.resolve(...).then(...)。
await产生一滴答的延迟,该延迟允许在状态更新完成后评估下一行,从而可以按预期顺序评估代码。这与:
this.setState({ roomId: room && room.roomId ? room.roomId : 0 } => { console.log(2)})setTimeout(() => { console.log(3)});无法保证订单在不同条件下会保持不变。同样,第一个
setState回调也不适合检查状态是否已更新,这就是第二个回调的目的。



