03. Closeable Iterator
Помимо метода next()
итератор может иметь опциональный метод return()
. Метод return?(value? : any)
- заставляет итератор завершиться раньше положенного срока и сбросить свое состояние. Если итератор имеет метод return
, то он называется закрываемым (closeable).
Работа итератора может завершиться преждевременно по следующим причинам:
В цикле
for-of
имеются вызовыbreak
,return
,continue
Выброс исключения или
throw
.Явный программный вызов
return()
на итераторе.
Правила работы return
:
Вызов
return
должен сбрасывать состояние итератора и освобождать используемые им ресурсы.Вызов
return()
должен возвращать{done: true}
,Вызов
return(x)
в нормальном режиме должен возвращать объект{ done: true, value: x }
.Метод
return
обязан возвращать объект, иначе будет выброшено исключение.На деле вызов
return
не обязан возвращатьdone: true
, а может продолжать итерацию и дальше.
Особенности использования .return()
.return()
вызывается если работа итератора должна завершиться преждевременно, до окончания итерации (исключение илиbreak
)..return()
чисто опциональный метод, не все итераторы имеют его. Итераторы на массивах не имеют..return()
method is optional: JS built-in constructs will not call.return()
on an iterator that doesn’t implement.return()
.Основное назначение метода
return
состоит в очистке ресурсов.Babel вызывает этот метод если итератор не выполнился нормально (не дошел до
done: true
) и если на итераторе определен методreturn
.Метод
.return()
вызывается даже если выполняется destructing.
Last updated
Was this helpful?