在我的反应函数组件中,我发送多个服务器请求并通过异步承诺更新状态挂钩值,方法是将服务器结果附加到状态最新值,但是一旦创建承诺,状态挂钩的值不会在运行的承诺内更新,因此如果另一个Promise 更新状态值,其他正在运行的 Promise 不会收到通知,因此它们使用旧版本的状态来进行进一步的状态更新。
下面的代码是我的组件的简化版本,我希望在多个 Promise 运行且状态更新时,从每个 Promise 的第 19 行控制台日志中看到相同(且最新)的值。
function App() {
const [myArray, setMyArray] = useState([0,1,2])
const sleep = (ms:number) => {
return new Promise(resolve => setTimeout(resolve, ms));
}
const updateArray = () => {
setMyArray([...myArray, myArray.length])
}
const firePromise = () => {
new Promise(async (resolve) => {
const timeStamp = new Date().getTime()
let repeatTime = 0
while(repeatTime < 12){
console.log("array: ", myArray, "promiseIdenifier: ", timeStamp);
repeatTime += 1
await sleep(1000)
}
resolve({timeStamp, myArray})
}).then(val => {
console.log("resolved: ", val);
}).catch(err => {
console.log("rejected: ", err);
})
}
return (
<div className="App">
<button onClick={firePromise}>new promise</button>
<button onClick={updateArray}>updateArray</button>
</div>
);
}
export default App;
桃花长相依
相关分类