關於錯誤訊息 RangeError - Maximum call stack size exceeded at XXX

JerryWang_汪子熙發表於2023-02-23

錯誤訊息:RangeError: Maximum call stack size exceeded at

ConnectableSubscriber.error

執行 Angular 開發的 Spartacus Storefront 時遇到。

RangeError: Maximum call stack size exceeded 當函式呼叫超出呼叫堆疊大小時丟擲。

這可能是由於以下原因造成的:

  • 函式呼叫太多。
  • 處理遞迴的問題,例如遞迴函式中缺少基本情況以停止無限呼叫自身。這個錯誤通常是由遞迴呼叫導致的。遞迴呼叫可能會導致堆疊溢位。在這種情況下,需要找到造成遞迴呼叫的程式碼並找到一種方法來避免遞迴呼叫。

首先,可以使用除錯工具(例如瀏覽器開發工具)檢視丟擲錯誤的程式碼。然後,您可以考慮下面幾種解決方案:

(1) 避免對資料進行重複訂閱。如果您在多個地方訂閱了同一個資料來源,則可能會發生遞迴呼叫。

(2) 使用 takeUntil 運運算元,以在觀察的某個時刻終止訂閱。

(3) 使用可觀察的錯誤處理機制(例如 catchError),以在發生錯誤時終止訂閱。

下面這段程式碼可以輕易重現該錯誤。

RangeError: Maximum call stack size exceeded at 

瀏覽器裡執行的結果:

  • 超出範圍的操作。如果由於過多的函式呼叫或變數而發生此錯誤,則應儘可能減少這些錯誤。還應檢查並避免任何超出範圍的操作。 可以使用瀏覽器控制檯和開發人員工具檢查這些問題。

此外,如果開發人員不小心兩次匯入/嵌入相同的 JavaScript 檔案,也可能會遇到這種情況。 要解決此問題,請檢查 JS 檔案中的匯入。此時開發人員會發現瀏覽器的資源選項卡很有用。

在舊版瀏覽器中,當嘗試將太多引數傳遞給瀏覽器無法處理的函式時,也會出現 RangeError。

相關文章