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