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, а может продолжать итерацию и дальше.
function readLinesSync(fileName) {
const file = ···;
return {
···
next() {
if (file.isAtEndOfFile()) {
file.close();
return { done: true };
}
···
},
return() {
file.close();
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?