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: lessons/lesson22/task.md
+36-54Lines changed: 36 additions & 54 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,8 +17,8 @@
17
17
18
18
- Функция promisify принимает на вход функцию, которая ожидает колбэк последним аргументом. Колбэк должен иметь стандартный вид: callback(error, result).
19
19
- promisify возвращает новую функцию. При вызове эта функция возвращает промис, который:
20
-
- Резолвится с результатом, если в колбэк передан null или undefined вместо ошибки.
21
-
- Реджектится, если в колбэк передана ошибка.
20
+
- Резолвится с результатом, если в колбэк передан null или undefined вместо ошибки.
21
+
- Реджектится, если в колбэк передана ошибка.
22
22
- Ваша функция должна корректно передавать все аргументы исходной функции, кроме колбэка.
23
23
24
24
```js
@@ -37,9 +37,9 @@ function sum(a, b, cb) {
37
37
constpromisifiedSum=promisify(sum);
38
38
39
39
promisifiedSum(2, 3)
40
-
.then(result=>console.log(result)) // 5
41
-
.catch(err=>console.log(err));// "Ошибка"
42
-
```
40
+
.then((result)=>console.log(result)) // 5
41
+
.catch((err)=>console.log(err)); // "Ошибка"
42
+
```
43
43
44
44
### Parallel
45
45
@@ -48,20 +48,13 @@ promisifiedSum(2, 3)
48
48
**Требования:**
49
49
50
50
- Класс должен называться `Parallel` и быть конструктором (использоваться через `new`).
51
-
52
51
- У экземпляра должны быть публичные методы:
53
-
-`job(fn)` — добавляет задачу (функцию), которую нужно выполнить. Метод должен поддерживать чейнинг (возвращать сам объект).
54
-
55
-
-`done(cb)` — запускает выполнение всех добавленных задач. Когда все задачи завершены, вызывает колбэк `cb`, передавая ему массив результатов.
56
-
52
+
-`job(fn)` — добавляет задачу (функцию), которую нужно выполнить. Метод должен поддерживать чейнинг (возвращать сам объект).
53
+
-`done(cb)` — запускает выполнение всех добавленных задач. Когда все задачи завершены, вызывает колбэк `cb`, передавая ему массив результатов.
57
54
- Если не было добавлено ни одной задачи, `done` должен вызываться асинхронно.
58
-
59
55
- Пока не вызван `done`, задачи не запускаются.
60
-
61
56
- Если при создании объекта передать число (например, `new Parallel(3)`), оно задаёт максимальное количество задач, которые могут выполняться одновременно.
62
-
63
57
- Все задачи — функции, которые принимают один аргумент: функцию-колбэк `done(result)`, которую нужно вызвать по завершении задачи.
64
-
65
58
- Результаты должны возвращаться в том же порядке, в котором были добавлены задачи.
66
59
67
60
- Продумайте выполнение задач без простоев
@@ -70,10 +63,10 @@ promisifiedSum(2, 3)
70
63
construnner=newParallel(2);
71
64
72
65
runner
73
-
.job(done=>setTimeout(() =>done('A'), 1000))
74
-
.job(done=>setTimeout(() =>done('B'), 500))
75
-
.job(done=>setTimeout(() =>done('C'), 300))
76
-
.done(results=> {
66
+
.job((done)=>setTimeout(() =>done("A"), 1000))
67
+
.job((done)=>setTimeout(() =>done("B"), 500))
68
+
.job((done)=>setTimeout(() =>done("C"), 300))
69
+
.done((results)=> {
77
70
console.log(results); // ['A', 'B', 'C']
78
71
});
79
72
```
@@ -89,66 +82,60 @@ runner
89
82
Если запрос завершается успешно, функция возвращает результат как обычный `fetch`. Если все попытки завершились неудачно, функция должна вернуть ошибку.
.catch((error)=>console.error("Ошибка после всех попыток:", error));
96
89
```
97
90
98
91
**Требования:**
99
92
100
-
- Если запрос завершился с ошибкой (например, сеть недоступна или получен некорректный HTTP-статус), функция должна подождать указанную задержку и попробовать снова, пока не исчерпает все попытки.
101
-
- После успешного ответа функция должна вернуть результат без дополнительных попыток.
102
-
- Если все попытки неудачны, функция должна вернуть ошибку.
103
-
93
+
- Если запрос завершился с ошибкой (например, сеть недоступна или получен некорректный HTTP-статус), функция должна подождать указанную задержку и попробовать снова, пока не исчерпает все попытки.
94
+
- После успешного ответа функция должна вернуть результат без дополнительных попыток.
95
+
- Если все попытки неудачны, функция должна вернуть ошибку.
104
96
105
97
### debounce
106
98
107
99
Напишите функцию `debounce`, которая принимает два аргумента:
108
-
- функцию, которую нужно вызывать (например, обработчик событий)
109
-
- время задержки в миллисекундах
110
-
100
+
101
+
- функцию, которую нужно вызывать (например, обработчик событий)
102
+
- время задержки в миллисекундах
103
+
111
104
Функция `debounce` должна возвращать новую функцию-обёртку. Эта обёртка при каждом вызове не будет сразу запускать исходную функцию, а будет откладывать её выполнение на заданное количество миллисекунд. Если обёртку вызвать ещё раз до истечения задержки, предыдущий таймер отменяется и запускается новый отсчёт. В итоге исходная функция будет вызвана только один раз — спустя указанное время после последнего вызова обёртки
112
105
113
106
```js
114
107
functiononInput(event) {
115
-
console.log('Запрос к серверу:', event.target.value);
108
+
console.log("Запрос к серверу:", event.target.value);
В этом примере функция `onInput` будет вызываться только через 500 мс после того, как пользователь прекратил вводить текст, а не на каждое нажатие клавиши.
124
117
125
118
**Что проверить:**
126
119
127
-
- Исходная функция вызывается не чаще одного раза за указанный интервал времени.
128
-
129
-
- При частых вызовах обёртки исходная функция не запускается, пока не наступит "пауза".
130
-
131
-
- Аргументы и контекст (`this`) корректно передаются в исходную функцию.
120
+
- Исходная функция вызывается не чаще одного раза за указанный интервал времени.
121
+
- При частых вызовах обёртки исходная функция не запускается, пока не наступит "пауза".
122
+
- Аргументы и контекст (`this`) корректно передаются в исходную функцию.
132
123
133
124
### serialProcess
134
125
135
126
Напишите функцию `serialProcess`, которая принимает массив элементов и функцию-обработчик для каждого элемента. Обработчик должен вызываться для каждого элемента массива по очереди (строго по одному, не параллельно), и переходить к следующему элементу только после завершения обработки предыдущего.
136
127
137
128
Функция-обработчик вызывается с четырьмя аргументами:
138
129
139
-
-`el` — текущий элемент массива,
140
-
141
-
-`index` — индекс текущего элемента,
142
-
143
-
-`list` — исходный массив,
144
-
145
-
-`done` — функция, которую нужно вызвать по завершении обработки элемента, передав ей результат обработки.
146
-
130
+
-`el` — текущий элемент массива,
131
+
-`index` — индекс текущего элемента,
132
+
-`list` — исходный массив,
133
+
-`done` — функция, которую нужно вызвать по завершении обработки элемента, передав ей результат обработки.
147
134
148
135
Функция `serialProcess` должна возвращать промис, который резолвится после завершения обработки всех элементов, с массивом результатов в том же порядке, что и исходный массив.
0 commit comments