Spec-Zone.ru › JavaScript

AsyncGenerator.prototype.throw()

Базовый уровень Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна в браузерах с января 2020 года.

Метод throw() экземпляров AsyncGenerator действует так, как если бы оператор throw был вставлен в тело генератора в текущей приостановленной позиции, что информирует генератор об ошибке и позволяет ему обработать ошибку, или выполнить очистку и закрыть себя.

Синтаксис

asyncGeneratorInstance.throw(exception)

Параметры

exception
Исключение, которое нужно выбросить. Для целей отладки полезно сделать его instanceof Error.

Возвращаемое значение

Если выброшенная ошибка не будет перехвачена, метод вернет Promise, который отклоняется с переданным исключением.

Если исключение перехвачено блоком try...catch и генератор возобновляется для выдачи новых значений, он вернет Promise, который разрешается с Object, содержащим два свойства:

done
Логическое значение:
  • true, если поток управления функции генератора достиг конца.
  • false, если функция генератора способна производить больше значений.
value
Значение, выданное следующим выражением yield.

Примеры

Использование throw()

Следующий пример демонстрирует генератор и ошибку, которая выбрасывается с использованием метода throw. Ошибку можно перехватить блоком try...catch как обычно.

// An async task. Pretend it's doing something more useful
// in practice.
function sleep(time) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time);
  });
}

async function* createAsyncGenerator() {
  while (true) {
    try {
      await sleep(500);
      yield 42;
    } catch (e) {
      console.error(e);
    }
  }
}

const asyncGen = createAsyncGenerator();
asyncGen.next(1).then((res) => console.log(res)); // { value: 42, done: false }
asyncGen
  .throw(new Error("Something went wrong")) // Error: Something went wrong
  .then((res) => console.log(res)); // { value: 42, done: false }

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-asyncgenerator-prototype-throw

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
throw
63
79
55
50
12
63
55
46
12
8.0
63
12
1.0.0
1.0
10.0.0

См. также

  • async function*
  • Руководство по итераторам и генераторам

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator/throw

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API