Generator.prototype.throw()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

제너레이터의 throw() 메서드는 현재 중단 된 위치에서 제너레이터에 throw 문이 삽입되는 것처럼 작동하여 제너레이터의 오류 조건을 알려주고 오류를 처리하거나 정리 작업을 수행하며 제너레이터를 종료할 수 있도록 합니다.

구문

js
generatorObject.throw(exception);

매개변수

exception

발생시킬 예외입니다. 디버깅을 위해 Error 인스턴스(instanceof Error)로 만드는 것이 유용합니다.

반환 값

예외가 try...catch에서 발생하고 제너레이터가 재개하여 더 많은 값을 yield하면 다음 두 가지 속성을 가진 객체를 반환합니다.

done

불리언 값입니다.

  • 제너레이터가 제어 흐름의 끝에 도달한 경우 true입니다.
  • 제너레이터가 더 많은 값을 생성 할 수 있다면 false입니다.
value

다음 yield 식에서 산출된 값입니다.

예외

예외가 try...catch에서 발생하지 않으면 throw()로 전달 된 exception은 제너레이터에서 취급하지 않습니다.

설명

throw() 메소드는 호출 될 때, 이는 현재 중단 된 위치의 제너레이터에 삽입된 throw exception; 문 처럼 보일 수 있습니다. exceptionthrow() 메서드에 전달 된 예외입니다. 따라서 일반적인 흐름에서 throw(exception)을 호출하면 제너레이터가 throw됩니다. 그러나 yield 식이 try...catch 블록으로 감싸졌 다면, 오류를 포착할 수 있으며 제어 흐름은 오류 처리 후 재개하거나 정상적으로 종료 하도록 진행됩니다.

예제

throw() 사용하기

다음 예제에서는 간단한 제너레이터와 throw 메서드를 사용하여 오류를 발생시키는 것을 보여 줍니다. 오류는 보통 try...catch 블록으로 처리합니다.

js
function* gen() {
  while (true) {
    try {
      yield 42;
    } catch (e) {
      console.log("Error caught!");
    }
  }
}

const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }

명세서

Specification
ECMAScript® 2025 Language Specification
# sec-generator.prototype.throw

브라우저 호환성

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
throw

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

같이 보기