更新時間:2025-08-06 21:53:58作者:佚名
Promise充當一種中介,指向一個在生成Promise時可能尚未確定的數值。這一特性使得你可以將處理邏輯與異步任務的最終結果或錯誤原因相綁定。因此留學之路,異步操作得以像同步操作那樣返回結果:它們不會立刻提供最終值,而是提供一個Promise對象,該對象將在適當的時候揭示該值。
一個 Promise 必然處于以下幾種狀態之一:
待確定的Promise最終可能實現并輸出一個結果,亦或因問題而拒絕并給出一個錯誤原因。無論哪種情形出現,都將觸發Promise的then方法中預設的后續處理流程。一旦Promise在關聯對應處理程序之前已經實現或被拒絕,該處理程序便會即刻被啟動,故此在異步任務完成與關聯處理程序之間并無競爭狀態。
一旦某個承諾已被實現或遭拒,那么它便不再處于未定狀態,我們將其稱作已定狀態。
你將聽到人們用“已解決”這一術語來解釋 Promise,這表明該 Promise 已經確定下來,或者已被“鎖定”以適應另一個 Promise 的最終狀態,對其進一步的確認或拒絕都不會產生影響。原始的Promise提案文檔“States and fates”中,對Promise相關術語的詳細內容進行了闡述。在日常生活中promise是什么意思,人們常用“已解決”來指代“已兌現”的Promise,但正如“States and fates”文檔所揭示的,一個已解決的Promise也可能是處于懸而未決或被拒絕的狀態。例如:
創建一個新的Promise對象,并將其回調函數設為接收一個名為resolveOuter的參數。
resolveOuter(
創建一個新的Promise對象,并傳入一個回調函數,該函數接收一個名為resolveInner的參數。
設置一個延遲時間為1000毫秒,執行resolveInner函數。
}),
);
});
此Promise在生成之初便已實現(鑒于resolveOuter的同步執行)promise是什么意思,然而,它是由另一個Promise來完成的實現,故而,在內部Promise實現后的1秒時刻,它才會最終實現。在現實操作中,這一實現過程往往是在幕后悄然進行的,無法被直接觀察到;唯有其實現或拒絕的結果,才是可以被察覺的。
其他編程語言同樣具備實現惰性求值和延遲計算的機制,這種機制也被稱作“promise”,例如在 Scheme 語言中就有這樣的應用。在 JavaScript 中,Promise 指的是正在進行的操作,而且它允許通過回調函數的方式實現操作的連續執行。若你打算實現延遲計算,不妨采用無參數的函數形式,比如設定 f 為一個箭頭函數 f = () => expression,以此來構建一個延遲計算的表達式,隨后通過調用 f() 來立即執行求值過程。
Promise 本身并未設立專門用于撤銷的協議,然而,你有可能直接對底層的異步任務進行取消操作,一般而言,AbortController 是實現這一功能的常用工具。