1. setTimeout(callback, millisecond)
- 일정 시간 후 함수 실행setTimeout(function () { console.log('1초 후 실행'); }, 1000); // 1000밀리초(1초)
2. clearTimeout(timerId)
- 단일 실행 타이머 취소const timer = setTimeout(function () { console.log('10초 후 실행'); }, 10000); clearTimeout(timer);
3. setInterval(callback, millisecond)
- 일정 시간의 간격을 가지고 함수를 반복적으로 실행setInterval(function () { console.log('1초마다 실행'); }, 1000);
4. clearInterval(timerId)
- 반복 실행 타이머 취소const timer = setInterval(function () { console.log('1초마다 실행'); }, 1000); clearInterval(timer);
function delayed(val, callback) { setTimeout(function() { callback(val); }, 2000); // 2초 후에 작업이 완료되면 콜백 함수 호출 } console.log("1"); delayed("2", function(el) { // delayed 함수로 출력을 지연시켜 3이 먼저 출력된다. console.log(el); }); console.log("3");
출력 결과
1 3 2
data1(function(result1) { data2(result1, function(result2) { data3(result2, function(result3) { // ... }); }); });
1. 대기(pending)
2. 이행(fulfilled)
3. 거부(rejected)
Promise를 이용하여 callback hell을 처리한 코드
const data1 = () => { return new Promise((resolve, reject) => { // 비동기 작업 수행 // 성공한 경우 resolve(result1) 호출 // 실패한 경우 reject(error) 호출 }); }; const data2 = (result1) => { return new Promise((resolve, reject) => { // 비동기 작업 수행 // 성공한 경우 resolve(result2) 호출 // 실패한 경우 reject(error) 호출 }); }; const data3 = (result2) => { return new Promise((resolve, reject) => { // 비동기 작업 수행 // 성공한 경우 resolve(result3) 호출 // 실패한 경우 reject(error) 호출 }); }; data1() .then((result1) => { return data2(result1); }) .then((result2) => { return data3(result2); }) .then((result3) => { // 결과 처리 }) //.then 메서드가 늘어나면 promise hell문제가 될수 있다. .catch((error) => { // 에러 처리 });
1. then
const promise = new Promise((resolve, reject) => { resolve("성공"); }); promise.then((result) => { console.log(result); // "성공" }).catch((error) => { console.error(error); });
2. catch
const promise = new Promise((resolve, reject) => { reject(new Error("거부")); }); promise.catch((error) => { console.error(error); // 거부 });
3. finally
const promise = new Promise((resolve, reject) => { resolve("성공"); }); promise.finally(() => { console.log("마지막에 실행"); }).then((result) => { console.log(result); // "성공" });
실행 결과
성공 마지막에 실행
4. Promise.resolve
const promise = Promise.resolve("성공"); promise.then((result) => { console.log(result); // "성공" });
5. Promise.reject
const promise = Promise.reject(new Error("거부")); promise.catch((error) => { console.log(error); // Error: 거부 });
6. Promise.all
const promise1 = Promise.resolve("Promise 1"); const promise2 = Promise.resolve("Promise 2"); const promise3 = Promise.resolve("Promise 3"); Promise.all([promise1, promise2, promise3]) .then((results) => { console.log(results); // ["Promise 1", "Promise 2", "Promise 3"] });
const data1 = () => { return new Promise((resolve, reject) => { // 비동기 작업 수행 // 성공한 경우 resolve(result1) 호출 // 실패한 경우 reject(error) 호출 }); }; const data2 = (result1) => { return new Promise((resolve, reject) => { // 비동기 작업 수행 // 성공한 경우 resolve(result2) 호출 // 실패한 경우 reject(error) 호출 }); }; const data3 = (result2) => { return new Promise((resolve, reject) => { // 비동기 작업 수행 // 성공한 경우 resolve(result3) 호출 // 실패한 경우 reject(error) 호출 }); }; async function processData() { try { const result1 = await data1(); const result2 = await data2(result1); const result3 = await data3(result2); // 결과 처리 } catch (error) { // 에러 처리 } } processData();