這可能看起來像一個奇怪的問題,但讓我解釋一下: 我有這個功能,我想變成一個承諾,因爲我相信一些事件沒有完全開火,其他人以前開始(例如,playersOverallTotal的狀態是錯誤的因爲我認爲它並沒有考慮到上面的代碼做,所以我需要等待它設置狀態如何開始JavaScript的承諾?
handleClickTwist() {
this.dealToPlayer();
this.forceUpdate();
let playersDeck = this.state.playersDeck;
let playersDeckTotal = [];
for (var i=0; i < playersDeck.length; i++){
playersDeckTotal.push(playersDeck[i].rankValue)
}
let total = playersDeckTotal.reduce(function(a, b) {
return a + b;
},
0);
this.setState({playersOverallTotal: total});
this.total();
};
我知道之前完成承諾看起來像下面
anotherFunc(){
return new Promise((resolve, reject) => {
resolve()
}
}
然後我可以c所有這樣的事情:
this.func().then(() => {
return this.anotherFunc();
}).then(() => {
return Promise.resolve(this.setState({playersOverallTotal: total}))
}).then(() => {
return this.anotherFun();
但我不能想到如何爲此代碼做到目前爲止。或者說,我可以在anotherFunc()
到踢的功能關閉的初始功能是什麼?
「什麼是最初的功能,我可以在anotherFunc調用()踢功能關閉?」 - 那就是'Promise',你已經在那裏打電話了。 – Quentin
我在代碼中看不到任何異步函數。所以你不需要承諾。如果「dealToPlayer()」或「forceUpdate()」是異步的,那麼它們應該接受回調或返回一個承諾。你的問題不在於'handleClickTwist()'函數 – slebetman
默認情況下,javascript代碼在繼續前等待前面的代碼完成。承諾和回調允許您在某個外部進程正在運行時執行某些操作 - 例如:加載圖像或json文件。在你的代碼中,我沒有看到任何外部進程,所以你的錯誤很可能只是一個編程錯誤。這取決於你的其他功能(dealToPlayer(),forceUpdate()等) – Kokodoko