You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/11-async/01-callbacks/article.md
+10-2Lines changed: 10 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -60,7 +60,7 @@ newFunction(); // немає такої функції!
60
60
*/!*
61
61
```
62
62
63
-
Природно, браузер, ймовірно, не встиг завантажити скрипт. На даний момент функція `loadScript` не надає можливості відстежувати завершення завантаження. Скрипт просто завантажується та зрештою запускається, це й все. Але ми хотіли б знати коли це станеться, щоб могти після цього використовувати нові функції та змінні з цього скрипту.
63
+
Природно, браузер, ймовірно, не встиг завантажити скрипт. Зараз функція `loadScript` не надає можливості відстежувати завершення завантаження. Скрипт просто завантажується та зрештою запускається, це й все. Але ми хотіли б знати коли це станеться, щоб могти після цього використовувати нові функції та змінні з цього скрипту.
64
64
65
65
Додаймо `callback`-функцію як другий аргумент до `loadScript`, яка має виконуватися, коли скрипт завантажується:
1. Завантажуємо `1.js`, продовжуємо, якщо немає помилки...
234
236
2. Завантажуємо `2.js`, продовжуємо, якщо немає помилки...
235
237
3. Ми завантажуємо `3.js`, продовжуємо, якщо немає помилки -- робимо щось інше `(*)`.
236
238
239
+
З кожним послідовним колбеком, код стає більш вкладеним і його дедалі важче підтримувати, особливо якщо у нас справжній код замість `...`, який може включати більше циклів, умовних операторів тощо.
240
+
241
+
Це іноді називають "callback hell" (з англ. колбек-пеклом) або "pyramid of doom" (з англ. пекельною пірамідою).
242
+
243
+
<!--
244
+
loadScript('1.js', function(error, script) {
237
245
if (error) {
238
246
handleError(error);
239
247
} else {
@@ -298,7 +306,7 @@ function step3(error, script) {
298
306
299
307
Це працює, але код виглядає розірваним на частини. Його важко читати, і ви, напевно, помітили, що під час читання потрібно стрибати між частинами. Це незручно, особливо якщо читач не знайомий з кодом і не знає, що за чим слідує.
300
308
301
-
Крім того, всі функції під назвою `step*` призначені для одноразового використання, вони створені лише для того, щоб уникнути "пекельної піраміди". Ніхто не збирається використовувати їх повторно за межами ланцюжка дій. Таким чином, тут є деяке нагромадження в просторі імен.
309
+
Крім того, всі функції під назвою `step*` призначені для одноразового використання, вони створені лише для того, щоб уникнути "пекельної піраміди". Ніхто не збирається використовувати їх повторно за межами ланцюжка дій. Таким чином, тут є деяке нагромадження у просторі імен.
0 commit comments