비동기 이터레이터와 for‑await‑of비동기 이터레이터를 구현하려면, 객체에 Symbol.asyncIterator 메서드를 추가해야 합니다. 이 메서드는 일반 이터레이터와 유사하지만, 각 next() 호출에서 반환하는 값이 프라미스로 감싸져 있어야 합니다.const asyncRange = { from: 1, to: 5, [Symbol.asyncIterator]() { let current = this.from; const last = this.to; return { async next() { // 1초 대기 (비동기 작업 시뮬레이션) await new Promise(resolve => setTimeout(resolve, 1000)); ..
제너레이터(generator)는 함수 실행을 중단했다가 필요할 때마다 재개할 수 있도록 해 주는 특별한 함수입니다. 일반 함수는 한 번 호출되면 단 하나의 값(또는 아무 값도) 반환하지만, 제너레이터 함수는 여러 값을 필요에 따라 “yield”하여 순차적으로 반환할 수 있습니다.제너레이터 함수와 기본 사용법제너레이터 함수는 function* 문법으로 정의하며, 호출 시 실행을 시작하지 않고 제너레이터 객체를 반환합니다. 이 객체는 .next() 메서드를 통해 제어할 수 있으며, 각 호출마다 함수 내부의 다음 yield 문까지 실행됩니다.function* generateNumbers() { yield 10; yield 20; return 30;}const gen = generateNumbers();c..
async 함수async 키워드는 함수 선언 시 function 키워드 앞에 위치하며, 해당 함수를 비동기 함수로 정의합니다.암묵적 프라미스 반환: async 함수는 명시적으로 프라미스를 반환하지 않더라도, 항상 프라미스를 반환합니다. 함수가 일반 값을 반환하는 경우, JavaScript 엔진은 해당 값을 Promise.resolve(value) 로 래핑하여 이행 상태(resolved)의 프라미스로 자동 변환합니다. await 키워드 활성화: async 함수 내부에서는 await 키워드를 사용하여 비동기 작업의 완료를 대기하고, 결과를 동기적으로 처리할 수 있습니다.// async 키워드를 사용하여 비동기 함수 선언async function asynchronousFunction() { // 일반 값..
마이크로태스크 큐란?자바스크립트 엔진은 비동기 작업들을 관리하기 위해 두 가지 큐를 사용합니다. 매크로태스크 큐: setTimeout, setInterval, I/O 작업 등 큰 단위의 작업들이 여기에 들어갑니다. 마이크로태스크 큐: 프라미스 핸들러나 process.nextTick(Node.js)과 같이 아주 짧은 작업들이 여기에 들어갑니다.마이크로태스크 큐는 매크로태스크 큐보다 높은 우선순위를 가집니다.프라미스가 이행되면, 해당 핸들러는 바로 실행되지 않고, 현재 실행 컨텍스트가 끝난 후 마이크로태스크 큐에 추가되고, 큐에 있는 태스크들이 모두 처리된 후에 실행됩니다.기본 마이크로태스크 동작console.log("동기 코드 시작");const promise = Promise.resolve("즉시 이행!..
콜백 기반 함수 예시function delayedGreetingCallback(name, delay, callback) { setTimeout(() => { if (name) { callback(null, `Hello, ${name}!`); } else { callback(new Error("Name is required"), null); } }, delay);}// 콜백 함수를 사용한 예제delayedGreetingCallback("Alice", 2000, (err, greeting) => { if (err) { console.error("오류:", err.message); } else { console.log(greeting); // 2초 후 "He..
Promise.all여러 프라미스가 모두 이행될 때까지 기다린 후, 각 프라미스의 결과를 배열로 반환합니다.단, 전달된 프라미스 중 하나라도 거부되면 전체 프라미스가 거부됩니다.// 각각 다른 시간에 이행되는 프라미스들const p1 = new Promise(resolve => setTimeout(() => resolve("Data A"), 3000));const p2 = new Promise(resolve => setTimeout(() => resolve("Data B"), 2000));const p3 = new Promise(resolve => setTimeout(() => resolve("Data C"), 1000));// 실패하는 프라미스const p4 = new Promise((resolve, ..