首頁 > web前端 > js教程 > 為什麼 fetch().then().json() 有時回傳 Promise,有時不回傳?

為什麼 fetch().then().json() 有時回傳 Promise,有時不回傳?

Patricia Arquette
發布: 2024-12-29 01:00:11
原創
874 人瀏覽過

Why Does fetch().then().json() Sometimes Return a Promise and Sometimes Not?

了解Fetch() 中的Promise 處理

使用JavaScript 的fetch() API 時,使用.json 時可能會出現一種意外行為() 方法。本文深入探討了為什麼 .json() 在某些情況下返回 Promise,而在其他情況下則不然。

為什麼 Promise 行為不同

.json() 方法會觸發Promise 物件檢索回應正文並將其解析為 JSON。這是因為 HTTP 回應的正文無法立即可用。因此, .json() 方法傳回一個 Promise,該 Promise 在正文可用時解析。

但是,如果 Promise 物件直接從 .then() 處理程序傳回,例如:

fetch(url)
  .then(response => response.json())
登入後複製

傳回值不會是 Promise。 Promise 不會無限期地包裝在 .then() 處理程序中。相反,返回底層值,允許非同步操作鏈繼續。

透過傳回的Promise 進行值存取

相反,如果Promise 物件嵌入在傳回的對象,例如:

fetch(url)
  .then(response => {
    return {
      data: response.json(),
      status: response.status
    }
  })
登入後複製

.then( ) 處理程序的回傳值將保留為承諾。這是因為建立了一個新的 JavaScript 對象,並且在其範圍內呼叫 .json() 方法。產生的 Promise 被指派給傳回物件的 data 屬性。

替代方法

要在一個.then() 處理程序中存取回應狀態和JSON 數據,可以使用以下方式:

  1. 直接返回Promise對象,後續處理.then() 處理程序。
  2. 在從 .json() 傳回的 Promise 上使用 .then() 方法,在傳回新物件之前提取資料和狀態。
  3. 使用async/await而不是Promise,這簡化了非同步

結論

理解.json() 方法的Promise 行為以及它如何與.then() 處理程序互動對於有效的非同步至關重要使用fetch() API進行編程。透過利用 Promises 提供的靈活性,開發人員可以確保高效處理 HTTP 回應並避免不必要的非同步操作嵌套。

以上是為什麼 fetch().then().json() 有時回傳 Promise,有時不回傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板