⊗jsSpACCH 160 of 294 menu

Vấn đề callback hell trong JavaScript

Giả sử chúng ta muốn sử dụng hàm loadImage để tải ba hình ảnh:

loadImage('img1.png', function(image, err) { document.body.append(image); }); loadImage('img2.png', function(image, err) { document.body.append(image); }); loadImage('img3.png', function(image, err) { document.body.append(image); });

Có điều gì đó không ổn với code này. Vấn đề là, các hình ảnh sẽ được thêm vào body theo tiến độ tải của chúng. Có nghĩa là không ai đảm bảo cho chúng ta rằng các hình ảnh sẽ được thêm vào đúng theo thứ tự mà chúng ta mong muốn.

Còn một vấn đề nữa. Giả sử chúng ta muốn làm một việc gì đó khi cả ba hình ảnh đều đã được tải xong. Trong code của chúng ta, chúng ta đơn giản là không thể bắt được thời điểm này, bởi vì cả ba hình ảnh được tải độc lập với nhau.

Được rồi, hãy sửa lại code:

loadImage('img1.png', function(image1, err1) { document.body.append(image1); loadImage('img2.png', function(image2, err2) { document.body.append(image2); loadImage('img3.png', function(image3, err3) { document.body.append(image3); console.log('tất cả hình ảnh đã được tải'); }); }); });

Chúng ta đã giải quyết được cả hai vấn đề đã mô tả. Tuy nhiên, lại nhận về một vấn đề khác. Hiện tại nó chưa thực sự rõ ràng, nhưng hãy tưởng tượng xem code của chúng ta sẽ trông như thế nào nếu trong đó có việc tải không phải ba, mà là, chẳng hạn, mười hình ảnh, cộng thêm việc xử lý ngoại lệ. Kết quả là code sẽ trở nên cực kỳ khó đọc: độ phức tạp của code tăng lên theo cấp số nhân khi các callback lồng vào nhau. Tình huống như vậy được gọi là callback hell - địa ngục callback.

Hãy viết lại đoạn code đã cho sao cho trong đó có việc tải 10 hình ảnh cộng với việc xử lý ngoại lệ. Hãy tự mình thấy rằng bạn đang gặp phải tình huống callback hell.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối