首頁  >  文章  >  web前端  >  為什麼我的 d3.json() 回呼中的程式碼未在 D3 v5 中執行?

為什麼我的 d3.json() 回呼中的程式碼未在 D3 v5 中執行?

Linda Hamilton
Linda Hamilton原創
2024-10-30 13:54:03325瀏覽

Why Is My Code Within the d3.json() Callback Not Executing in D3 v5?

d3.json() 回呼中的程式碼執行中斷

在D3 v5 中,d3.json() 回呼中的程式碼無法執行,讓開發人員感到無法執行,讓開發人員感到困惑。這種差異的出現是由於 D3 v4 以來 d3.json() 的簽名發生了重大變化。

D3 v5 中向 Promises 的遷移

D3 v5 已經放棄了 XMLHttpRequest 並採用了 Fetch API,有利於承諾管理非同步請求。因此,d3.json() 的第二個參數不再是負責處理請求的回呼。相反,它充當可選的 RequestInit 物件。因此,d3.json() 現在傳回一個可以使用其 .then() 方法操作的 Promise。

用於處理非同步請求的修訂代碼

要解決此問題,您的程式碼應修改如下:

d3.json("/trip_animate/tripData.geojson")
  .then(function(data){
    // Code from your callback goes here...
  });

D3 v5 中的錯誤處理

D3 v5 中的錯誤處理也發生了變化。在早期版本中,錯誤是透過傳遞給 d3.json() 的回呼的第一個參數來報告的。然而,在D3 v5中,如果發生錯誤,d3.json()返回的Promise將被拒絕。這使得可以使用普通的JS 錯誤處理機制:

使用拒絕處理程序作為.then() 的第二個參數

d3.json("/trip_animate/tripData.geojson")
  .then(function(data) {
    // Code from your callback goes here...
  }, function(error) {
    // Error handling code here...
  });

使用.catch( ) 處理拒絕

d3.json("/trip_animate/tripData.geojson")
  .then(function(data) {
    // Code from your callback goes here...
  })
  .catch(function(error) {
    // Error handling code here...
  });

以上是為什麼我的 d3.json() 回呼中的程式碼未在 D3 v5 中執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn