錯誤訊息: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。