Maximum call stack size exceeded. json data tidak komplit terload

Halo Saya mau nanya pada sepuh di sini yang ngerti. kasus nya saya mau buat rendermarker pada google Maps API, Udah bisa kodingan nya tapi ada masalahnya, Karena Route Nya saya gunain Lat dan Long yang saya jadikan json data dan saya load berhasil. Tetapi Ketika Menggunakan 2 function berbeda seperti di bawah ini
// function pemanggilan route dari duri ke bogor
function DuriBogor(){
		if (currentIndex < krl_KotaBogor.length) {
            mapCenter = {
                lat: krl_KotaBogor[currentIndex][0],
                lng: krl_KotaBogor[currentIndex][1]
            };
			console.log(krl_KotaBogor[currentIndex])
            if (marker_KotaBogor == "") {
			marker_KotaBogor = new google.maps.Marker({
                    position: mapCenter,
                    map: map,
                    info: '<B>KERETA</B>' + ' ' + '<p>Kereta Api Jurusan Jakarta Kota - Bogor</p>',
                    icon: SITE_LOCAL + "assets/build/images/train.png",
                });
                var infowindow1 = new google.maps.InfoWindow();
                google.maps.event.addListener(marker_KotaBogor, 'click', function () {
                    infowindow1.setContent(this.info);
                    infowindow1.open(map, this);
                });
            } else {
                marker_KotaBogor.setPosition(mapCenter);
            }
            if (backward) {
                currentIndex -= 1;
            } else {
                currentIndex += 1;
            }
            iterateTimeout = setTimeout(function () {
                DuriBogor()
            }, 300);
        } else {
            if (backward) {
                backward = false;
            } else {
                backward = true;
                currentIndex -= 1;
            }
            backward = true;
            DuriBogor()	
        }
    }


// function pemanggilan dari duri tangerang
	function DuriTangerang(){
		if (currentIndex < krl_DuriTangerang.length) {
            mapCenter = {
                lat: krl_DuriTangerang[currentIndex][0],
                lng: krl_DuriTangerang[currentIndex][1]
            };
            if (marker_DuriTangerang == "") {
                marker_DuriTangerang = new google.maps.Marker({
                    position: mapCenter,
                    map: map,
                    info: '<B>KERETA</B>' + ' ' + '<p>Kereta Api Jurusan Duri - Tangerang</p>',
                    icon: SITE_LOCAL + "assets/build/images/train.png",
                });
                var infowindow1 = new google.maps.InfoWindow();
                google.maps.event.addListener(marker_DuriTangerang, 'click', function () {
                    infowindow1.setContent(this.info);
                    infowindow1.open(map, this);
                });
            } else {
                marker_DuriTangerang.setPosition(mapCenter);
            }
            if (backward) {
                currentIndex -= 1;
            } else {
                currentIndex += 1;
            }
            iterateTimeout = setTimeout(function () {
                DuriTangerang()
            }, 300);
        } else {
            if (backward) {
                backward = false;
            } else {
                backward = true;
                currentIndex -= 1;
            }
            backward = true;
            DuriTangerang()
        }
    }
Eror nya ketika saya cuma 1 data diakan ke load semua data tetapi ketika saya menggunakan 2 function hasilnya function pertama ga ke load semua. kira2 kenapa yah saya coba cari ada maximum call stack. Terima Kasih
avatar Ridhoa

Ditanyakan oleh @Ridhoa

114 Kontribusi 29 Poin

Login untuk menanggapi


Jawaban

karena error-nya 'maximum call stack'. 
ini biasanya karena penggunaan memory yang terlalu besar atau 'task'/stack yang mencapai maximum yang di-set oleh runtime. 

baca sekilas saja code agan. 
- ada kemungkinan code-nya itu menjadi rekursif atau infinite-loop. 
Dalam code itu, setTimeout di-set 300. 300 itu sama dengan 0.3 detik; apa perlu execute DuriBogor atau DuriTangerang setiap 0.3 detik? 
ketika fungsi sedang berjalan, fungsi tersebut di-execute lagi 0.3 detik kemudian. 
- variable iterateTimeout juga gunakan oleh ke-dua fungsi diatas; ini saling meng-override.

-- 2020.06.27

Melihat ulang code agan.
Membuat 2 variable yang berbeda memang membantu, tapi main problem sepertinya tetap di-rekursif-nya.

contoh di function DuriBogor.
Dalamnya agan memanggil function itu sendiri.
Di sini ada 2, pada setTimeout dan di-else-nya.

Pertama kali function itu dipanggil, runtime akan membuatkan set memory atau stack.
dan ketika function itu di panggil lagi dalam function tersebut ia membuat stack baru dengan parrent stack yang pertama kali function itu dipanggil.
Itu sudah 2 stack yang tercipta, karena stack parrent akan close setelah child stack close.
Jadi banyangkan berapa banyak stack sebelum mencapai maximum stack yang disediakan.
Di tambah parah, ada 2 function yang hampir sama. 
Ini akan mempercepat mencapai maximum stack.

Untuk itu coba design ulang function tersebut tanpa menggunakan rekursif.
 
avatar soeleman

Dijawab oleh @soeleman

50 Kontribusi 37 Poin

  • jadi apakah saya membuat var baru untuk seTimeout nya ? karena saya baca juga menggunakan var iterate itu membuat function nya berjaan sama di setiap 0.3 detik ? - @Ridhoa
  • update jawaban. - @soeleman

Login untuk menanggapi


kalau saya coba lagi walau di buat 2 var iterateTimeout nya tetap menghasilkan eror yang sama, karena itu data nya di dalam 1 json yang sama
avatar Ridhoa

Dijawab oleh @Ridhoa

114 Kontribusi 29 Poin

Login untuk menanggapi


Login untuk gabung berdiskusi