ข้อผิดพลาดเกินขนาดสูงสุดของสแต็ก


533

ฉันใช้ไฟล์ไลบรารี JavaScript Direct Direct Remoting (DWR) และฉันได้รับข้อผิดพลาดเฉพาะใน Safari (เดสก์ท็อปและ iPad)

มันบอกว่า

เกินขนาดสแต็กการโทรสูงสุด

ข้อผิดพลาดนี้หมายถึงอะไรอย่างแน่นอนและมันหยุดการประมวลผลอย่างสมบูรณ์?

ยังแก้ไขSafariเบราว์เซอร์ใด ๆ(จริง ๆ แล้วiPad Safariมันพูดว่า

JS: การดำเนินการเกินเวลาที่กำหนด

ที่ฉันสมมติว่าเป็นปัญหาการโทรสแต็คเดียวกัน)


2
ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามส่งตัวแปร (โดยไม่ต้องประกาศ) ผ่านdataใน ajax แก้ไขข้อผิดพลาดโดยการประกาศตัวแปร
— phpfresher

คำตอบ:


621

หมายความว่าบางแห่งในรหัสของคุณคุณกำลังเรียกฟังก์ชั่นซึ่งจะเรียกฟังก์ชั่นอื่นและอื่น ๆ จนกว่าคุณจะกดขีด จำกัด การโทร

นี่เกือบจะเป็นเพราะฟังก์ชั่นวนซ้ำพร้อมเคสพื้นฐานที่ไม่ได้พบ

กำลังดูสแต็ก

พิจารณารหัสนี้ ...

(function a() {
    a();
})();

นี่คือสแต็คหลังจากการโทรจำนวนหนึ่ง ...

Web Inspector

อย่างที่คุณเห็นการโทรสแต็คจะโตขึ้นเรื่อย ๆ จนกว่าจะถึงขีด จำกัด : ขนาดเบราว์เซอร์ที่กำหนดรหัสยากหรือหน่วยความจำหมด

เพื่อแก้ไขให้แน่ใจว่าฟังก์ชั่นวนซ้ำของคุณมีตัวพิมพ์ใหญ่ที่สามารถพบได้ ...

(function a(x) {
    // The following condition 
    // is the base case.
    if ( ! x) {
        return;
    }
    a(--x);
})(10);

6
ขอบคุณมากสำหรับสิ่งนั้น .. ดังนั้นจะมีวิธีใด / เครื่องมือที่ฉันสามารถที่จะ จำกัด การสแต็คกำลังจะหมด .. อีกครั้งเนื่องจากนี่เป็นไฟล์ไลบรารีขนาดใหญ่และไม่ได้สร้างโดยฉันฉันไม่ทราบว่าอยู่ที่ไหน สิ่งที่อาจจะผิดพลาด ..
— testndtv

52
@Oliver หากคุณต้องใช้งานฟังก์ชั่นเกือบ 300 ล้านล้านครั้งคุณอาจทำอะไรผิดพลาด
— ceejayoz

3
@Oliver - คุณอาจต้องการดูในการเขียนโปรแกรมแบบไดนามิก - เดาของฉันคือคุณไม่ได้มีวิธีการแก้ปัญหาที่ไม่ซ้ำกันมากคุณกำลังทำซ้ำขั้นตอนดังนั้นคุณอาจต้องโปรแกรมให้เป็นเวลาพหุนามมากกว่ากำลังสอง en.wikipedia.org/wiki/Dynamic_programming
— newshorts

4
@Akhoy ในฟังก์ชั่นปกติใช่ แต่คิดเกี่ยวกับฟังก์ชั่นซ้ำ มันเรียกอีกอย่างหนึ่ง (ตัวเอง) และปล่อยให้ที่อยู่ผู้ส่งของอดีตบนสแต็ค (มิฉะนั้นพีซีจะรู้ว่าจะไปที่ไหน) หลักสูตรนี้เรียกตัวเองอีกครั้งทุกครั้งที่ผลักที่อยู่ผู้ส่งกลับไปที่สแต็ก เมื่อสิ่งนี้หายไปเนื่องจากกรณีพื้นฐานที่ไม่น่าจะเกิดขึ้นในศตวรรษหน้าคุณจะได้รับสแต็คล้น
— alex

5
รหัสของคุณทำงานในส่วนที่ไม่มีประสิทธิภาพเดียวกัน 134217728 ครั้ง ไม่ล้อเล่นช้า คุณควรใช้ตัวดำเนินการระดับบิตเพื่อให้คุณสามารถปลดลูปได้ 9 ระดับในระดับหนึ่งของลูป
— Jack Giffin

82

บางครั้งคุณสามารถรับสิ่งนี้ได้หากคุณนำเข้า / ฝังไฟล์ JavaScript สองครั้งโดยไม่ตั้งใจควรตรวจสอบในแท็บทรัพยากรของผู้ตรวจสอบ


9
ปัญหานี้มักเกิดขึ้นเมื่อคุณนำเข้า / ฝังไฟล์ JS เดียวกันสองครั้งโดยไม่ตั้งใจ กระบวนการที่แน่นอนที่ทำให้เกิดวนซ้ำไม่ใช่สิ่งที่ฉันสนใจที่จะคาดเดา แต่ฉันคิดว่ามันเหมือนกับการขับรถสองคันเหมือนกันที่ความเร็ว 100 ไมล์ต่อชั่วโมงผ่านประตูเก็บค่าผ่านทางเดียวกัน
— lucygenik

3
ฉันไม่คิดว่าเป็นกรณีนี้ หากฟังก์ชั่นหรือตัวแปรชนิดเดียวกันสองตัวถูกฝังอยู่หลังจะแทนที่คำนิยามก่อนหน้า
— ssudaraka

ใช่ ... ฉันไม่รู้จริง ๆ ว่าทำไมมันถึงเกิดขึ้นหรือกระบวนการนี้คืออะไรฉันจะมีแม้ว่ามันจะแทนที่ด้วย
— lucygenik

สายไปงานเลี้ยงเล็กน้อย แต่จะคิดว่ามันเป็นเมื่อรหัสอยู่นอกฟังก์ชั่นใด ๆ ทั้งสองจะถูกดำเนินการภายในสองไฟล์ JS และหนึ่งอาจจะไม่เขียนทับแต่ละคนอื่น ๆ เพราะพวกเขาอยู่นอกฟังก์ชั่นใด ๆ
— Cillian Collins

1
@lucygenik ครั้งต่อไปที่คุณต้องการระวังให้มากขึ้นเมื่ออนุมัติการแก้ไขการหมุนรอบข้อความของคุณ โพสต์นี้เกือบจะถูกลบว่าเป็นจดหมายขยะ (ตรวจสอบประวัติ)
— Jean-François Fabre

56

ในกรณีของฉันฉันกำลังส่งองค์ประกอบอินพุตแทนค่าของพวกเขา:

$.post( '',{ registerName: $('#registerName') } )

แทน:

$.post( '',{ registerName: $('#registerName').val() } )

สิ่งนี้ทำให้แท็บ Chrome ของฉันแข็งตัวจนถึงขั้นที่ไม่แสดงให้ฉันเห็นกล่องโต้ตอบ 'รอ / ฆ่า' เมื่อหน้าเว็บไม่ตอบสนอง ...


3
ฉันสงสัยว่าทำไมไม่มีข้อยกเว้นสำหรับข้อผิดพลาดดังกล่าว ... ขอบคุณ!
— Džuris

ขอบคุณมากสิ่งนี้ช่วยฉัน
— Eme Hado

ฉันกำลังจะเพิ่มสิ่งนี้เป็นทางออกที่เป็นไปได้ ฉันเพิ่งทำสิ่งนี้แน่นอน lol
— Michael Buchok

31

มีวนซ้ำในรหัสของคุณ (เช่นฟังก์ชันที่เรียกตัวเองซ้ำแล้วซ้ำอีกจนกระทั่งกองซ้อนเต็ม)

เบราว์เซอร์อื่นอาจมีสแต็คที่ใหญ่กว่า (ดังนั้นคุณจึงได้รับการหมดเวลาแทน) หรือพวกเขากลืนข้อผิดพลาดด้วยเหตุผลบางอย่าง

ใช้ดีบักเกอร์เพื่อตรวจสอบ call stack เมื่อเกิดข้อผิดพลาด


ขอบคุณมากสำหรับการตอบกลับของคุณ ใน IE / FF รหัสดูเหมือนว่าจะทำงานได้ดี .. เฉพาะบนเดสก์ท็อป Safari และ iPad Safari ฉันได้รับข้อผิดพลาด จริงๆแล้วไฟล์ JS ไม่ใช่การสร้างของฉันเอง แต่เป็นไฟล์ไลบรารี (จาก DWR engine.js) .. directwebremoting.org นอกจากนี้เมื่อคุณพูดว่า "debugger เพื่อตรวจสอบ call stack" ฉันจะใช้ Safari Inspector อย่างไร
— testndtv

ฉันไม่มีประสบการณ์กับ Safari Inspector ลองเปิดดีบักเกอร์ JavaScript และโหลดหน้าเว็บของคุณ โปรแกรมดีบั๊กควรหยุดเมื่อเกิดข้อผิดพลาดที่ไม่ตรงกัน หากไม่ได้ทำงานให้ถามใน superuser หรือเว็บมาสเตอร์ (ดูด้านล่างของหน้า)
— แอรอน Digulla

มีฟังก์ชั่น 2 อย่างชื่อเดียวกัน !! DOH!
— jharris8567

16

ปัญหาเกี่ยวกับการตรวจสอบ stackoverflows บางครั้งการติดตามสแต็กจะผ่อนคลายและคุณจะไม่สามารถเห็นสิ่งที่เกิดขึ้นจริง

ฉันพบเครื่องมือการแก้ไขข้อบกพร่องรุ่นใหม่กว่าของ Chrome มีประโยชน์สำหรับเรื่องนี้

ตีPerformance tabให้แน่ใจJavascript samplesมีการเปิดใช้งานและคุณจะได้รับบางสิ่งบางอย่างเช่นนี้

เห็นได้ชัดว่าที่นี่ล้นอยู่ที่นี่! หากคุณคลิกที่extendObjectคุณจะสามารถเห็นหมายเลขบรรทัดที่แน่นอนในรหัส

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้คุณยังสามารถดูเวลาที่อาจมีหรือไม่มีประโยชน์หรือเป็นปลาเฮอริ่งแดงก็ได้

ป้อนคำอธิบายรูปภาพที่นี่


เคล็ดลับที่มีประโยชน์อีกอย่างถ้าคุณไม่สามารถหาปัญหาได้จริง ๆ console.logที่คุณคิดว่าเป็นปัญหา ขั้นตอนก่อนหน้าข้างต้นสามารถช่วยคุณได้

ใน Chrome หากคุณส่งข้อมูลที่ซ้ำกันซ้ำไปซ้ำมามันจะแสดงเช่นนี้แสดงให้เห็นว่าปัญหาอยู่ที่ใด ในกรณีนี้สแต็คกระทบ 7152 เฟรมก่อนที่มันจะล้มเหลวในที่สุด:

ป้อนคำอธิบายรูปภาพที่นี่


13

ในกรณีของฉันฉันกำลังแปลงอาร์เรย์ขนาดใหญ่เป็นสตริงโดยใช้สิ่งต่อไปนี้:

String.fromCharCode.apply(null, new Uint16Array(bytes))

bytes มีหลายล้านรายการซึ่งใหญ่เกินกว่าที่จะใส่ลงในสแต็กได้


ฉันก็มีปัญหาเดียวกันกับบรรทัดเดียวกัน !! thanx
— ksh

ดังนั้นทางออกที่ดีที่สุดสำหรับการแปลงอาร์เรย์ขนาดใหญ่คืออะไร?
— ksh

6
@KarthikHande คุณต้องทำแบบวนซ้ำแทนการโทรครั้งเดียว var uintArray = new Uint16Array(bytes); var converted = []; uintArray.forEach(function(byte) {converted.push(String.fromCharCode(byte))});
— Nate Glenn

ฉันจะแปลงให้เป็น JSON ได้อย่างไรฉันลองใช้ JSON.parse แต่ไม่ได้ผล ... ฉันใช้ Uintl8Array
— ksh

@KarthikHande ฉันไม่สามารถบอกได้หากไม่เห็นปัญหาทั้งหมด โปรดเปิดคำถามอื่นพร้อมรายละเอียดทั้งหมด
— Nate Glenn

6

ในกรณีของฉันเหตุการณ์คลิกกำลังเผยแพร่ในองค์ประกอบลูก ดังนั้นฉันต้องใส่สิ่งต่อไปนี้:

e.stopPropagation ()

เมื่อคลิกเหตุการณ์:

 $(document).on("click", ".remove-discount-button", function (e) {
           e.stopPropagation();
           //some code
        });
 $(document).on("click", ".current-code", function () {
     $('.remove-discount-button').trigger("click");
 });

นี่คือรหัส html:

 <div class="current-code">                                      
      <input type="submit" name="removediscountcouponcode" value="
title="Remove" class="remove-discount-button">
   </div>

5

ตรวจสอบรายละเอียดข้อผิดพลาดในคอนโซลแถบเครื่องมือ Chrome dev ซึ่งจะให้ฟังก์ชันใน call stack และแนะนำคุณเกี่ยวกับการเรียกซ้ำที่ทำให้เกิดข้อผิดพลาด


5

หากคุณต้องการกระบวนการที่ไม่สิ้นสุด / การเรียกซ้ำด้วยเหตุผลบางอย่างคุณสามารถใช้เว็บเวิร์คเกอร์ในเธรดแยกต่างหาก http://www.html5rocks.com/en/tutorials/workers/basics/

หากคุณต้องการจัดการองค์ประกอบ dom และวาดใหม่ให้ใช้ภาพเคลื่อนไหว http://creativejs.com/resources/requestanimationframe/


3

เกือบทุกคำตอบที่นี่ระบุว่าสิ่งนี้อาจเกิดจากการวนซ้ำไม่สิ้นสุด นั่นไม่เป็นความจริงคุณสามารถเรียกใช้สแต็คผ่านการโทรที่ซ้อนกันลึก (ไม่ได้บอกว่ามันมีประสิทธิภาพ แต่มันอยู่ในขอบเขตที่เป็นไปได้อย่างแน่นอน) หากคุณมีการควบคุม JavaScript VM ของคุณคุณสามารถปรับขนาดสแต็กได้ ตัวอย่างเช่น:

node --stack-size=2000

ดูเพิ่มเติม: ฉันจะเพิ่มขนาดการโทรสูงสุดใน Node.js ได้อย่างไร


2

ในกรณีของฉัน jQuery สองรูปแบบกำลังแสดงซ้อนกันอยู่ด้านบนของกันและกัน การป้องกันนั้นแก้ไขปัญหาของฉันได้


2

เราเพิ่งเพิ่มเขตข้อมูลลงในไซต์ผู้ดูแลระบบที่เรากำลังทำงานอยู่ - contact_type ... ง่ายใช่ไหม ดีถ้าคุณโทรเลือก "ประเภท" และลองส่งมันผ่าน jquery ajax โทรมันล้มเหลวด้วยข้อผิดพลาดนี้ฝังลึกใน jquery.js อย่าทำสิ่งนี้:

$.ajax({
    dataType: "json",
    type: "POST",
    url: "/some_function.php",
    data: { contact_uid:contact_uid, type:type }
});

ปัญหาคือประเภท: ประเภท - ฉันเชื่อว่ามันเป็นเราตั้งชื่ออาร์กิวเมนต์ "ประเภท" - มีตัวแปรค่าชื่อประเภทไม่ใช่ปัญหา เราเปลี่ยนสิ่งนี้เป็น:

$.ajax({
    dataType: "json",
    type: "POST",
    url: "/some_function.php",
    data: { contact_uid:contact_uid, contact_type:type }
});

และเขียน some_function.php ใหม่อีกครั้ง - แก้ไขปัญหาแล้ว


1

ตรวจสอบว่าคุณมีฟังก์ชั่นที่เรียกตัวเองหรือไม่ ตัวอย่างเช่น

export default class DateUtils {
  static now = (): Date => {
    return DateUtils.now()
  }
}

1

สิ่งนี้ยังสามารถทำให้เกิดMaximum call stack size exceededข้อผิดพลาด:

var items = [];
[].push.apply(items, new Array(1000000)); //Bad

กันที่นี่:

items.push(...new Array(1000000)); //Bad

จากMozilla Docs :

แต่ระวัง: ในการใช้งานด้วยวิธีนี้คุณจะเสี่ยงเกินขีดจำกัดความยาวอาร์กิวเมนต์ของเครื่องมือ JavaScript ผลที่ตามมาของการใช้ฟังก์ชั่นที่มีข้อโต้แย้งมากเกินไป (คิดว่ามากกว่าหนึ่งหมื่นข้อโต้แย้ง) จะแตกต่างกันไปตามเอนจิ้น (JavaScriptCore มีขีด จำกัด อาร์กิวเมนต์แบบตายตัวจำนวน 65536) เนื่องจากขีด จำกัด (แน่นอนแม้กระทั่งธรรมชาติของกองซ้อนขนาดใหญ่ พฤติกรรม) ไม่ได้ระบุ เครื่องมือบางอย่างจะทำให้เกิดข้อยกเว้น ผู้อื่นจะ จำกัด จำนวนของข้อโต้แย้งที่ส่งผ่านไปยังฟังก์ชันที่ใช้อย่างไม่เป็นอันตราย เพื่อแสดงให้เห็นถึงกรณีหลังนี้: หากเครื่องยนต์มีขีด จำกัด สี่ข้อโต้แย้ง (ขีด จำกัด ที่เกิดขึ้นจริงมีค่าสูงกว่าอย่างมีนัยสำคัญ) มันจะเหมือนกับว่าข้อโต้แย้ง 5, 6, 2, 3 ถูกส่งผ่านไปใช้ในตัวอย่างด้านบน มากกว่าอาร์เรย์เต็ม

ดังนั้นลอง:

var items = [];
var newItems = new Array(1000000);
for(var i = 0; i < newItems.length; i++){
  items.push(newItems[i]);
}

0

การร้องขอทั้งสองของรหัสที่เหมือนกันด้านล่างหากลดลง 1 ผลงานใน Chrome 32 บนคอมพิวเตอร์ของฉันเช่น 17905 กับ 17904 หากทำงานตามที่พวกเขาจะสร้างข้อผิดพลาด "RangeError: เกินขนาดสแต็กการโทรสูงสุด" ดูเหมือนว่าจะเป็นขีด จำกัด นี้ไม่ได้เป็นฮาร์ดโค้ด แต่ขึ้นอยู่กับฮาร์ดแวร์ของเครื่องของคุณ ปรากฏว่าหากเรียกใช้เป็นฟังก์ชั่นการ จำกัด การเรียกตนเองนี้จะสูงกว่าถ้าเรียกใช้เป็นวิธีการเช่นรหัสนี้ใช้หน่วยความจำน้อยลงเมื่อเรียกใช้เป็นฟังก์ชั่น

เรียกใช้เป็นวิธีการ:

var ninja = {
    chirp: function(n) {
        return n > 1 ? ninja.chirp(n-1) + "-chirp" : "chirp";
    }
};

ninja.chirp(17905);

เรียกใช้เป็นฟังก์ชัน:

function chirp(n) {
    return n > 1 ? chirp( n - 1 ) + "-chirp" : "chirp";
}

chirp(20889);

0

คุณสามารถค้นหาฟังก์ชั่นวนซ้ำในเบราว์เซอร์ crome กด ctrl + shift + j จากนั้นแท็บแหล่งที่มาซึ่งจะช่วยให้คุณรวบรวมการไหลของรหัสและคุณสามารถค้นหาโดยใช้จุดพักในรหัส


อย่างไรก็ตามในบางครั้งอาจเป็นเรื่องยากที่จะทราบว่าเกิดข้อผิดพลาดที่ใด เรามี JavaScript จำนวนมากบนเว็บไซต์ของเรา
— Mathias Lykkegaard Lorenzen

0

ฉันยังประสบปัญหาที่คล้ายกันที่นี่คือรายละเอียดเมื่ออัปโหลดโลโก้โดยใช้กล่องอัปโหลดโลโก้แบบเลื่อนลง

<div>
      <div class="uploader greyLogoBox" id="uploader" flex="64" onclick="$('#filePhoto').click()">
        <img id="imageBox" src="{{ $ctrl.companyLogoUrl }}" alt=""/>
        <input type="file" name="userprofile_picture"  id="filePhoto" ngf-select="$ctrl.createUploadLogoRequest()"/>
        <md-icon ng-if="!$ctrl.isLogoPresent" class="upload-icon" md-font-set="material-icons">cloud_upload</md-icon>
        <div ng-if="!$ctrl.isLogoPresent" class="text">Drag and drop a file here, or click to upload</div>
      </div>
      <script type="text/javascript">
          var imageLoader = document.getElementById('filePhoto');
          imageLoader.addEventListener('change', handleImage, false);

          function handleImage(e) {
              var reader = new FileReader();
              reader.onload = function (event) {

                  $('.uploader img').attr('src',event.target.result);
              }
              reader.readAsDataURL(e.target.files[0]);
          }
      </script>
      </div>

css.css

.uploader {
  position:relative;
  overflow:hidden;
  height:100px;
  max-width: 75%;
  margin: auto;
  text-align: center;

  img{
    max-width: 464px;
    max-height: 100px;
    z-index:1;
    border:none;
  }

  .drag-drop-zone {
    background: rgba(0, 0, 0, 0.04);
    border: 1px solid rgba(0, 0, 0, 0.12);
    padding: 32px;
  }
}

.uploader img{
  max-width: 464px;
  max-height: 100px;
  z-index:1;
  border:none;
}



.greyLogoBox {
  width: 100%;
  background: #EBEBEB;
  border: 1px solid #D7D7D7;
  text-align: center;
  height: 100px;
  padding-top: 22px;
  box-sizing: border-box;
}


#filePhoto{
  position:absolute;
  width:464px;
  height:100px;
  left:0;
  top:0;
  z-index:2;
  opacity:0;
  cursor:pointer;
}

ก่อนที่จะแก้ไขรหัสของฉันคือ:

function handleImage(e) {
              var reader = new FileReader();
              reader.onload = function (event) {
                  onclick="$('#filePhoto').click()"
                  $('.uploader img').attr('src',event.target.result);
              }
              reader.readAsDataURL(e.target.files[0]);
          }

ข้อผิดพลาดในคอนโซล:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันแก้ไขได้โดยลบออกonclick="$('#filePhoto').click()"จากแท็ก div


คุณเพิ่มคลิกที่ไหน ()
— Tsea

0

ฉันประสบปัญหาเดียวกันฉันได้แก้ไขมันโดยลบชื่อฟิลด์ที่ใช้สองครั้งใน ajax เช่น

    jQuery.ajax({
    url : '/search-result',
    data : {
      searchField : searchField,
      searchFieldValue : searchField,
      nid    :  nid,
      indexName : indexName,
      indexType : indexType
    },
.....

0

ฉันรู้ว่ากระทู้นี้เก่า แต่ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงสถานการณ์ที่ฉันพบปัญหานี้เพื่อให้สามารถช่วยเหลือผู้อื่นได้

สมมติว่าคุณมีองค์ประกอบที่ซ้อนกันดังนี้:

<a href="#" id="profile-avatar-picker">
    <span class="fa fa-camera fa-2x"></span>
    <input id="avatar-file" name="avatar-file" type="file" style="display: none;" />
</a>

คุณไม่สามารถจัดการเหตุการณ์องค์ประกอบลูกในเหตุการณ์ของพาเรนต์เพราะมันแพร่กระจายไปยังตัวเองทำให้การเรียกซ้ำจนกว่าจะมีการโยนข้อยกเว้น

ดังนั้นรหัสนี้จะล้มเหลว:

$('#profile-avatar-picker').on('click', (e) => {
    e.preventDefault();

    $('#profilePictureFile').trigger("click");
});

คุณมีสองตัวเลือกเพื่อหลีกเลี่ยงปัญหานี้:

  • ย้ายเด็กไปที่ด้านนอกของผู้ปกครอง
  • ใช้ฟังก์ชันstopPropagationกับองค์ประกอบลูก


0

หากคุณทำงานกับแผนที่ google ให้ตรวจสอบว่า lat lng กำลังถูกส่งผ่านเป็นnew google.maps.LatLngรูปแบบที่เหมาะสมหรือไม่ ในกรณีของฉันพวกเขาจะถูกส่งเป็นไม่ได้กำหนด


0

ปัญหาในกรณีของฉันเป็นเพราะฉันมีเส้นทางลูกที่มีเส้นทางเดียวกันกับผู้ปกครอง:

const routes: Routes = [
  {
    path: '',
    component: HomeComponent,
    children: [
      { path: '', redirectTo: 'home', pathMatch: 'prefix' },
      { path: 'home', loadChildren: './home.module#HomeModule' },
    ]
  }
];

ดังนั้นฉันต้องลบแนวเส้นทางเด็ก

const routes: Routes = [
  {
    path: '',
    component: HomeComponent,
    children: [
      { path: 'home', loadChildren: './home.module#HomeModule' },
    ]
  }
];

0

ในกรณีของฉันฉันได้รับข้อผิดพลาดนี้ในการโทร ajax และข้อมูลที่ฉันพยายามส่งผ่านตัวแปรนั้นยังไม่ได้กำหนดนั่นแสดงให้ฉันเห็นข้อผิดพลาดนี้ แต่ไม่ได้อธิบายถึงตัวแปรที่ไม่ได้กำหนดไว้ ฉันเพิ่มนิยามไว้ว่าตัวแปร n มีค่า


ถูกไฟไหม้ในลักษณะที่คล้ายกันตัวเองในกรณีของฉันมันเป็นเพราะฉันพิมพ์ชื่อตัวแปร ... ได้อย่างมีประสิทธิภาพในสิ่งเดียวกัน
— user2366842

0

พบปัญหาเดียวกันโดยไม่คิดว่ามีอะไรผิดเริ่มตำหนิบาเบล;)

มีรหัสไม่กลับข้อยกเว้นในเบราว์เซอร์:

if (typeof document.body.onpointerdown !== ('undefined' || null)) {

ปัญหาถูกสร้างขึ้นอย่างไม่ดี || (หรือ) ส่วนหนึ่งเมื่อ babel สร้างการตรวจสอบประเภทของตัวเอง:

function _typeof(obj){if(typeof Symbol==="function"&&_typeof(Symbol.iterator)==="symbol")

ดังนั้นการลบ

|| null

ทำให้การส่งข้อมูล babel ทำงานได้


0

ในกรณีของฉันฉันโดยไม่ได้ตั้งใจฉันได้กำหนดชื่อตัวแปรเดียวกันและฟังก์ชั่น val "class_routine_id"

var class_routine_id = $("#class_routine_id").val(class_routine_id);

มันควรจะเป็นเช่น:

 var class_routine_id = $("#class_routine_id").val(); 


0

ฉันใช้ React-Native 0.61.5พร้อมกับ ( npm 6.9.0 & โหนด 10.16.1 )

ในขณะที่ฉันกำลังติดตั้งไลบรารีใหม่ในโครงการที่ฉันได้รับ

(เช่น npm install @ react-navigation / native - บันทึก)

ข้อผิดพลาดเกินขนาดสูงสุดของสแต็ก

สำหรับสิ่งที่ฉันลอง

ทำความสะอาดแคช sudo npm - บังคับใช้

(หมายเหตุ: - คำสั่งด้านล่างมักใช้เวลา 1 ถึง 2 นาที ขึ้นอยู่กับขนาดแคช npmของคุณ)


-1

บางครั้งเกิดขึ้นเนื่องจากการแปลงชนิดข้อมูลตัวอย่างเช่นคุณมีวัตถุที่คุณถือว่าเป็นสตริง

socket.id ใน nodejs ทั้งในไคลเอ็นต์ js เป็นตัวอย่างไม่ใช่สตริง เพื่อใช้เป็นสตริงคุณต้องเพิ่มคำว่า String มาก่อน:

String(socket.id);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.