Skip to content

Commit cccf279

Browse files
committed
Add RU translation for 133 number of questions
1 parent 570f2df commit cccf279

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

ru-RU/README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4255,3 +4255,49 @@ console.log(counterOne.count);
42554255
</p>
42564256
</details>
42574257
4258+
---
4259+
4260+
###### 133. Что будет на выходе?
4261+
4262+
```javascript
4263+
const myPromise = Promise.resolve(Promise.resolve('Promise!'));
4264+
4265+
function funcOne() {
4266+
myPromise.then(res => res).then(res => console.log(res));
4267+
setTimeout(() => console.log('Timeout!', 0));
4268+
console.log('Last line!');
4269+
}
4270+
4271+
async function funcTwo() {
4272+
const res = await myPromise;
4273+
console.log(await res);
4274+
setTimeout(() => console.log('Timeout!', 0));
4275+
console.log('Last line!');
4276+
}
4277+
4278+
funcOne();
4279+
funcTwo();
4280+
```
4281+
4282+
- A: `Promise! Last line! Promise! Last line! Last line! Promise!`
4283+
- B: `Last line! Timeout! Promise! Last line! Timeout! Promise!`
4284+
- C: `Promise! Last line! Last line! Promise! Timeout! Timeout!`
4285+
- D: `Last line! Promise! Promise! Last line! Timeout! Timeout!`
4286+
4287+
<details><summary><b>Ответ</b></summary>
4288+
<p>
4289+
4290+
#### Ответ: D
4291+
4292+
Сначала мы вызываем функцию `funcOne`. В первой строке `funcOne` происходит вызов обещания `myPromise`, которое является _асинхронной_ операцией. Пока движок занят обработкой обещания, он продолжает выполнение функции `funcOne`. Следующая строка является _асинхронной_ функцией `setTimeout`, поэтому её обратный вызов будет отправлен в Web API. (см. мою статью о цикле событий [здесь](https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif).)
4293+
4294+
Обещание, как и таймер, является асинхронной операцией, поэтому функция продолжит выполняться несмотря на обработку обещания и обратного вызова `setTimeout`. Выходит так, что `Last line!` попадет в консоль первой, т.к. не является асинхронной операцией. Далее, в следующей строке `funcOne`, обещание будет выполнено и `Promise!` выводится в консоль. Однако, т.к. далее мы вызываем `funcTwo()`, стэк вызывов не будет пустым, из-за чего обратный вызов функции `setTimeout` _пока_ не будет добавлен в стэк вызовов.
4295+
4296+
В первой строке `funcTwo` мы _ожидаем_ выполнения обещания myPromise. С помощью ключевого слова `await` мы приостанавливаем выполнение функции пока обещание не будет выполнено (или отклонено). Затем выводим в консоль _ожидаемое_ значение `res` (т.к. предыдущее обещание вернуло обещание). После чего в консоль попадает `Promise!`.
4297+
4298+
Следующая строка является _асинхронной_ функцией `setTimeout`, которая отправляет обратный вызов в Web API.
4299+
4300+
Мы перешли к следующей строке функции `funcTwo` которая выводит в консоль `Last line!`. Теперь, когда стэк вызовов извлечен из `funcTwo`, он становится пустым. Обратные вызовы, которые ожидали очереди (`() => console.log("Timeout!")` из `funcOne`, и `() => console.log("Timeout!")` из `funcTwo`) добавлены в стэк вызовов один за другим. Первый вызов выведет в консоль `Timeout!` и будет извлечен из стэка. Следующий вызов также выведет `Timeout!` и тоже будет извлечен из стэка вызовов. Лог будет равен `Last line! Promise! Promise! Last line! Timeout! Timeout!`
4301+
4302+
</p>
4303+
</details>

0 commit comments

Comments
 (0)