我正在嘗試進行一個函式呼叫“sendAndMove”,其中包含兩個函式。我希望按照設定()---> goHome()的順序執行兩個函式。但是當我撰寫如下代碼時,它會像 goHome() ---> setting() 一樣執行。所以我使用 async/await 來實作目標。
這個問題是不是因為異步特性和呼叫堆疊導致的?我想知道如果頁面更改,為什么設定()函式不起作用。非常感謝
function setting() {
setFinalInfo((prev)=>{return{...prev,
finalAddress: info.address,
finalCode: info.code,
finalDetailAddress: info.detailAddress,
finalPostCode: info.postCode,
finalExtraAddress: info.extraAddress}
});
}
function goHome(){
navigate("/")
}
function sendAndMove() {
setting();
goHome();
}
所以我改成了下面的代碼。
function setting() {
setFinalInfo((prev)=>{return{...prev,
finalAddress: info.address,
finalCode: info.code,
finalDetailAddress: info.detailAddress,
finalPostCode: info.postCode,
finalExtraAddress: info.extraAddress}
});
}
function goHome(){
navigate("/")
}
async function sendAndMove() { ***** Changed this part
await setting();
await goHome();
}
uj5u.com熱心網友回復:
您真正想要做的是從回呼到可等待承諾的“通道”,如下所示:
function setting() {
return new Promise((resolve) => {
setFinalInfo((prev) => {
resolve({
...prev,
finalAddress: info.address,
finalCode: info.code,
finalDetailAddress: info.detailAddress,
finalPostCode: info.postCode,
finalExtraAddress: info.extraAddress,
});
});
});
}
function goHome() {
navigate('/');
}
async function sendAndMove() {
await setting();
goHome();
}
順便說一句,您不需要等待,goHome()因為那不是異步函式。
uj5u.com熱心網友回復:
最佳方法是設定狀態,然后用于useEffect觀察狀態變化,然后呼叫navigate.
function update() {
setFinalInfo((prev) => {
return { ...prev,
finalAddress: info.address,
finalCode: info.code,
finalDetailAddress: info.detailAddress,
finalPostCode: info.postCode,
finalExtraAddress: info.extraAddress
}
});
}
useEffect(() => {
navigate('/');
}, [finalInfo]),
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361208.html
標籤:javascript 反应
