在Promise 鏈上使用setTimeout
Promise 提供非同步操作的順序排序,允許開發人員使用基於回調的程式碼,就像使用基於回呼的程式碼一樣是同步的。然而,在 Promise 鏈中的操作之間引入延遲可能會帶來挑戰。
問題:
在提供的程式碼片段中,嘗試使用 setTimeout 進行延遲,但結果是JSON 解析錯誤。為什麼會出現這種情況,如何解決?
答案:
出現此問題是因為 setTimeout 沒有回承諾。預設情況下,當您從 Promise 鏈傳回一個值時,它會包裝在已解析的 Promise 物件中。但是,由於 setTimeout 傳回計時器 ID,因此 Promise 鏈被破壞,且傳回的值不會被視為 Promise。
要解決此問題,可以使用以下方法:
1.在Promise 鏈外建立延遲函數:
不要使用setTimeout,而是定義一個將延遲包裝在Promise 的延遲函數:
更新的程式碼:
2。向Promise 對象添加Delay 方法:
更優雅的解決方案是使用延遲方法擴展Promise 對象:
更新的代碼:
透過使用這些技術,您可以在Promise 鏈中引入延遲,而不會影響連結行為並避免執行階段錯誤。
以上是為什麼在 Promise 鏈中使用 setTimeout 會破壞鏈,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!