[typescript] 비동기 이터레이션의 개념

이번 블로그에서는 TypeScript에서 비동기 이터레이션의 개념에 대해 알아보겠습니다. 비동기 이터레이션은 최신 JavaScript 및 TypeScript의 기능 중 하나로, 비동기적으로 이터레이터를 통해 데이터를 처리할 수 있는 기능을 제공합니다.

이터러블 및 이터레이터

이터러블Symbol.iterator 메서드를 가지고 있는 객체를 의미합니다. 이터레이터next 메서드를 가지고 있는 객체로, next 메서드는 {value, done} 형태의 객체를 반환합니다.

let iterable = {
  [Symbol.iterator]() {
    let i = 0;
    return {
      next() {
        if (i < 3) {
          return { value: i++, done: false };
        } else {
          return { value: undefined, done: true };
        }
      }
    };
  }
};

let iterator = iterable[Symbol.iterator]();

console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

비동기 이터레이션

이제, 이터레이션을 비동기적으로 처리하기 위해 asyncawait 키워드를 사용하여 Symbol.asyncIterator 메서드를 구현하는 방법에 대해 알아보겠습니다.

let asyncIterable = {
  [Symbol.asyncIterator]() {
    let i = 0;
    return {
      async next() {
        await new Promise(resolve => setTimeout(resolve, 1000)); // 비동기 작업 시뮬레이션
        if (i < 3) {
          return { value: i++, done: false };
        } else {
          return { value: undefined, done: true };
        }
      }
    };
  }
};

(async function() {
  for await (let item of asyncIterable) {
    console.log(item); // 0, 1, 2
  }
})();

위의 코드에서 asyncIterableSymbol.asyncIterator 메서드를 사용하여 비동기 이터레이터를 구현하고 있습니다. 또한, for await...of 문을 사용하여 비동기적으로 이터레이터를 처리하고 있습니다.

결론

TypeScript에서는 비동기 이터레이션을 통해 비동기적으로 이터러블한 객체를 처리할 수 있도록 지원하고 있습니다. 이를 활용하여 비동기 작업을 간편하게 처리할 수 있습니다.

참고 문헌:

이상으로 TypeScript에서의 비동기 이터레이션에 대해 알아보았습니다. 부족한 부분이 있거나 추가적으로 알고 싶은 내용이 있다면, 언제든지 문의해주세요.