[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 }
비동기 이터레이션
이제, 이터레이션을 비동기적으로 처리하기 위해 async
및 await
키워드를 사용하여 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
}
})();
위의 코드에서 asyncIterable
은 Symbol.asyncIterator
메서드를 사용하여 비동기 이터레이터를 구현하고 있습니다. 또한, for await...of
문을 사용하여 비동기적으로 이터레이터를 처리하고 있습니다.
결론
TypeScript에서는 비동기 이터레이션을 통해 비동기적으로 이터러블한 객체를 처리할 수 있도록 지원하고 있습니다. 이를 활용하여 비동기 작업을 간편하게 처리할 수 있습니다.
참고 문헌:
- MDN Web Docs: Symbol.asyncIterator
- TypeScript Documentation: Iterators and Generators
- ECMAScript 2018 Language Specification - 13.7.5 AsyncIteratorPrototype.next
이상으로 TypeScript에서의 비동기 이터레이션에 대해 알아보았습니다. 부족한 부분이 있거나 추가적으로 알고 싶은 내용이 있다면, 언제든지 문의해주세요.