代表一個值,可能現在可用,或將來可用,或永遠不可用。
Promise 生命週期:
待處理:功能開始運作。
已完成:操作成功完成,我們有一個結果值。
已拒絕:操作失敗,我們有一個錯誤物件。
Promise 的語法:
使用新的 Promise 建構函式建立 Promise,該建構函式採用帶有兩個參數的函式:resolve 和reject。
在程式碼片段中,我們有一個名為 getUser 的函數,它會傳回一個新的 Promise(一個具有處理非同步操作方法的 Promise 物件)。
在 Promise 建構函數中,我們有一個 setTimeout 函數,用於模擬非同步操作,例如從資料庫中取得資料。 Promise 有兩個關鍵方法傳遞給它:
resolve:操作成功時呼叫。在本例中,如果 id === 1,則傳回一個模擬使用者物件 { id: 1, name: "Diana", email: "Diana@test.com" }.
reject:操作失敗時呼叫。如果 id 不為 1,則 Promise 將被拒絕,並顯示錯誤訊息「找不到使用者...」。
resolve 和reject 函數的作用類似於promise 上下文中的return 語句,允許呼叫者處理操作的成功或失敗。
Promise 可以連結起來,讓您可以按順序執行一系列非同步操作:
在此範例中,我們連結多個 Promise 來模擬逐步取得資料。
首先,我們呼叫 getUser(1) 來取得使用者資料。如果有效,我們將進入下一步。
其次,我們取得 user.id 並透過呼叫 getOrders(user.id) 使用它來取得該使用者的訂單。
-第三,我們從清單中選擇第二個訂單 (orders[1]) 並使用 getOrderDetails(orders[1]) 來取得其詳細資訊。
如果任何時候出現任何問題(例如找不到使用者或訂單遺失),錯誤將在 .catch() 區塊中捕獲並顯示。
結果:
這種方法可以更輕鬆地以乾淨、逐步的方式處理非同步任務,而不是使用混亂的程式碼。
Promise.all():並行執行多個 Promise 並等待所有承諾都解決。
Promise.all([promise1, promise2]) .then((results) => { console.log(results); // Array of all fulfilled values });
範例:
(我建議閱讀此方法並將其與回調進行比較)
以上是JavaScript 中的 Promise的詳細內容。更多資訊請關注PHP中文網其他相關文章!