promise6大好處2025!內含promise絕密資料

Promise 藉由捕捉所有錯誤,包含例外和程式錯誤,解決了 Callback 地獄的缺點。 promise 基本上,一個 Promise 是一個根據附加給他的 Callback 回傳的物件,以取代傳遞 Callback 到這個函數。 通常而言,如果你不知道一個值是否是 promise 對象,使用 Promise.resolve 來返回一個 Promise promise2025 對象,這樣就能將該 value 以 promise 對象形式使用。 一旦有任意一個 iterable 裏面的 promise 對象失敗則立即以該 promise 對象失敗的理由來拒絕這個新的 promise。 Promise() 創建一個新的 Promise 對象。 該構造函數主要用於包裝還沒有添加 promise 支持的函數。

  • 鏈式調用中的 promise 們就像俄羅斯套娃一樣,是嵌套起來的,但又像是一個棧,每個都必須從頂端被彈出。
  • Promise 是一個表示非同步運算的最終完成或失敗的物件。
  • Promise 的值的兌現過程都被日誌記錄(logged,使用 p1.then())下來。
  • 一個 Promise 對象代表一個在這個 promise 被創建出來時不一定已知值的代理。
  • 這樣使得異步方法可以像同步方法那樣返回值:異步方法並不會立即返回最終的值,而是會返回一個 promise,以便在未來某個時候把值交給使用者。

對於下面的代碼,promiseA 向“已敲定”狀態的過渡會導致兩個實例的 .then 都被調用。 若要提高錯誤發生的概率,請該改變 threshold 的值。 鏈式調用中的 promise 們就像俄羅斯套娃一樣,是嵌套起來的,但又像是一個棧,每個都必須從頂端被彈出。

promise: More meanings of promise

鏈式調用中的第一個 promise 是嵌套最深的一個,也將是第一個被彈出的。 混合古代 Callback promise2025 和 Promise 是有問題的。 如果 saySomething 失敗或有程式錯誤,那不會有任何錯誤被捕捉。

  • 其獨特之處在於,它擁有運行 JavaScript 代碼所需的所有信息。
  • 如果所有的 promise 都成功了,它會把一個包含 iterable 裏所有 promise 返回值的數組作爲成功回調的返回值。
  • “已決議”狀態的返回值會逐級傳遞到下一個 .then() 中,而“已拒絕”的理由則會被傳遞到鏈中的下一個已拒絕狀態的處理函數。
  • 鏈式調用中的第一個 promise 是嵌套最深的一個,也將是第一個被彈出的。
  • 由於多數人使用預建立的 Promise,這個導覽會先講解回傳 Promise 的使用方式,之後再介紹如何建立。
  • 每一個設置對象都有自己的“副本”,而且它們與副本之間是不共享的。

待定狀態的 Promise 對象要麼會通過一個值被兌現,要麼會通過一個原因(錯誤)被拒絕。 當這些情況之一發生時,我們用 promise 的 then 方法排列起來的相關處理程序就會被調用。 如果 promise 在一個相應的處理程序被綁定時就已經被兌現或被拒絕了,那麼這個處理程序也同樣會被調用,因此在完成異步操作和綁定處理方法之間不存在競態條件。 爲了更好地說明這一點,我們在這裏進一步探討領域是如何引發問題的。 其獨特之處在於,它擁有運行 JavaScript 代碼所需的所有信息。

promise: 使用 Promise

這些函數的終止狀態決定着鏈式調用中下一個 promise 的“已敲定”狀態是什麼。 “已決議”狀態意味着 promise 已經成功完成,而“已拒絕”則表示 promise 未成功完成。 “已決議”狀態的返回值會逐級傳遞到下一個 .then() promise 中,而“已拒絕”的理由則會被傳遞到鏈中的下一個已拒絕狀態的處理函數。 此示例展示了使用 promise 的多種方法,以及其可能發生的多種情況。

另一個使用 Promise 和 XMLHttpRequest 加載一個圖像的例子可在 promise2025 MDN GitHub js-examples 倉庫中找到。 每一步都有註釋可以讓你詳細的瞭解 Promise 和 XHR 架構。 如果所有的 promise 都成功了,它會把一個包含 iterable 裏所有 promise 返回值的數組作爲成功回調的返回值。

promise: Translations of promise

每一個設置對象都有自己的“副本”,而且它們與副本之間是不共享的。 這可能會導致一些與 promise 相關的意外行爲。 爲了解決這個問題,我們需要追蹤現有設置對象(incumbent settings object)。 一個 Promise 對象代表一個在這個 promise 被創建出來時不一定已知值的代理。 它讓你能夠把異步操作最終的成功返回值或者失敗原因和相應的處理程序關聯起來。 這樣使得異步方法可以像同步方法那樣返回值:異步方法並不會立即返回最終的值,而是會返回一個 promise,以便在未來某個時候把值交給使用者。

promise: promise verb

備註: 如果一個 promise 已經被兌現或被拒絕,那麼我們也可以說它處於 已敲定(settled) 狀態。 你還會聽到一個經常跟 promise 一起使用的術語:已決議(resolved),它表示 promise 已經處於已敲定狀態,或者爲了匹配另一個 promise 的狀態被“鎖定”了。 Domenic Denicola 的 promise States and fates 中有更多關於 promise 術語的細節可以供你參考。 基本上,Promise 建構子需要一個運作函數來正規地處理或拒絕 Promise。 但因為 setTimeout 不會失敗,所以我們捨棄 reject。 使用 Promise 構造函數來創建 promise。

promise: Examples of promise

過早地處理變爲已拒絕狀態的 promise 會對之後 promise 的鏈式調用造成影響。 不過有時候我們因爲需要馬上處理一個錯誤也只能這樣做。 例如,外面必須拋出某種類型的錯誤以在鏈式調用中傳遞錯誤狀態。 另一方面,在沒有迫切需要的情況下,可以在最後一個 .catch() 語句時再進行錯誤處理,這種做法更加簡單。

promise: promise noun

請注意,函數 troubleWithGetNumber() 以 throw() 結束。 這是強制的做法,因爲 ES6 的 promsie 會遍歷所有的 .then promise,在遇到錯誤時,如果不使用 throw(),這個錯誤會被當作“已修復”。 這很麻煩,因此,通常會在 .then() promise 調用鏈中忽略 rejectionFunc,而僅在最後的 .catch() 中保留一個 rejectionFunc。 另一種方法是拋出一個特殊值(本例使用了 -999,但使用自定義錯誤類型更合適)。 Promise.resolve 返回一個狀態由給定 value 決定的 Promise 對象。 返回一個 promise,該 promise 在所有 promise 都敲定後完成,並兌現一個對象數組,其中的對象對應每個 promise 的結果。

promise: 使用 XHR 加載圖像

設置對象(settings object)是 JavaScript 代碼運行時用於提供附加信息的環境。 它包含了領域(realm)和模塊映射(module map),以及 HTML 的特定信息,如來源(origin)等。 對現有設置對象的追蹤保證了瀏覽器知道用戶給定的哪些代碼片段需要使用。 一個已經處於“已敲定”狀態的 promise 也可以接收操作。 在那種情況下,(如果沒有問題的話)這個操作會被作爲第一個異步操作被執行。

promise: Meaning of promise in English

因此,一個已經處於“已敲定”狀態的 promise 中的操作只有 promise 鏈式調用的棧被清空且一個時間片段過去之後纔會被執行。 當 .then() 中缺少能夠返回 promise 對象的函數時,鏈式調用就直接繼續進行下一環操作。 因此,鏈式調用可以在最後一個 .catch() 之前把所有的處理已拒絕狀態的回調函數都省略掉。 Promise 是一個表示非同步運算的最終完成或失敗的物件。 由於多數人使用預建立的 Promise,這個導覽會先講解回傳 Promise 的使用方式,之後再介紹如何建立。

promise: Promise

Promise 的值的兌現過程都被日誌記錄(logged,使用 p1.then())下來。 這些日誌信息展示了方法中的同步代碼和異步代碼是如何通過 promise 完成解耦的。 Promise.reject 返回一個狀態爲已拒絕的 Promise 對象,並將給定的失敗信息傳遞給對應的處理函數。 在上面的示例中, 僅在現有設置對象被追蹤時纔會被更新。 這是因爲在不追蹤的情況下,我們可能會使用錯誤的環境發送消息。

American Dictionary

要理解這一點,首先滾動到代碼塊的底部,然後查看 promise 調用鏈。 在創建初始的 promise primise 後,可以接上一條 promise 調用鏈。 該調用鏈由 .then() 組成,通常(但不一定)在末尾會有一個 .catch(),並可能會接上一個 .finnaly()。 在本示例中,promise 調用鏈是由一個自定義的 new Promise() 構造併發起的;但在實踐中,promise 調用鏈通常由一個 API 函數(由其他人編寫的)返回的 promise 開始。