Войти Регистрация
Фронтенд

71. Когда асинхронный генератор платежей закрывает соединение

Средняя

Что выведет код? Запишите строки по порядку, по одной на строку.

В работе: Лента платежей СберБанк Онлайн читает историю постранично через генератор; человек ушёл с экрана — соединение должно закрыться.

Как проверяем Код не запускаем — предскажите вывод. Пишите строки по порядку, по одной на строку; пробелы по краям не важны. Ответ один на подход: после него показываем разбор.
асинхронные генераторыfinallybreakreturn

Источник: на задачах Сбера: лента платежей в СберБанк Онлайн. Условие пересказано своими словами.

  1. async function* payments(tag) {
  2. console.log(tag, 'открыли соединение');
  3. try {
  4. yield 'ЖКХ 4 312 ₽';
  5. yield 'МТС 650 ₽';
  6. yield 'Штраф 500 ₽';
  7. } finally {
  8. console.log(tag, 'закрыли соединение');
  9. }
  10. }
  11. async function main() {
  12. for await (const p of payments('A')) {
  13. console.log('A', p);
  14. if (p.startsWith('МТС')) break;
  15. }
  16. try {
  17. for await (const p of payments('B')) {
  18. console.log('B', p);
  19. throw new Error('нет сети');
  20. }
  21. } catch (e) {
  22. console.log('B поймали', e.message);
  23. }
  24. const it = payments('C');
  25. console.log('C', (await it.next()).value);
  26. console.log('C return', JSON.stringify(await it.return('стоп')));
  27. console.log('C после', JSON.stringify(await it.next()));
  28. const d = payments('D');
  29. console.log('D return до старта', JSON.stringify(await d.return('рано')));
  30. }
  31. main().then(() => console.log('готово'));