Что выведет код Senior Dart: Future, Stream, изоляты обновлено
Dart: цепочка then и вложенный Future
Вопрос
Что выведет программа? По строке на каждый вывод.
import 'dart:async';
void main() {
Future.value(1)
.then((v) {
print('then $v');
return Future(() => v + 1);
})
.then((v) => print('then $v'));
scheduleMicrotask(() => print('micro'));
Future(() => print('event'));
print('sync');
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: sync, then 1, micro, event, then 2. Синхронно sync.
Что выведет
sync
then 1
micro
event
then 2
Разбор
Синхронно sync. Future.value(1) создан первым, и микрозадача его завершения встала в очередь раньше, чем micro: поэтому then 1 идёт до micro. Первый then вернул Future(...), то есть событие, поставленное уже после event. Второй then ждёт это событие, поэтому event раньше then 2.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.