비동기 (Asyncronous) 란?
step1(function (value1) {
step2(function (value2) {
step3(function (value3) {
step4(function (value4) {
step5(function (value5) {
step6(function (value6) {
// this is callback hell...
});
});
});
});
});
});
Fulfilled
, Reject
로 표현한다)// 분할 콜백 패턴 (success는 성공, error는 실패 시 실행할 콜백 함수)
const success = function(data) {
console.log(data);
};
const fail = function(err) {
console.log(err);
};
$.ajax({
url: `https://example/api/v1/users?param1=${param1}¶m2=${param2}`,
method: 'GET',
async = true,
dataType: 'html',
success : success,
error: fail,
});
// 1초 뒤에 resolve 함수를 호출하도록 하는 Promise 객체 생성
const testPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Resolved Promise"), 1000);
});
testPromise.then((result) => {
console.log(result);
}); /// 1초 후 Resolved Promise 출력
// 1초 뒤에 rejected 함수를 호출하도록 하는 Promise 객체 생성
const testPromise2 = new Promise((resolve, reject) => {
setTimeout(() => reject("Rejected Promise"), 1000);
});
testPromise2.catch((result) => {
console.log(result);
}); /// 1초 후 Resolved Promise 출력
then
핸들러를 호출한다.catch
핸들러를 호출한다.finally
핸들러를 호출한다.Promise.resolve()
함수는 fulfilled 상태가 되는 Promise를 생성한다.Promise.reject()
함수는 reject 상태가 되는 Promise를 생성한다.// 1초 뒤에 resolve 함수를 호출하도록 하는 Promise 객체 생성
const testPromise = new Promise.resolve("immediately Resolved");
const testPromise2 = new Promise.reject("immediately Rejected");
// "Result : immediately Resolved" 출력
testPromise.then(
(result) => {
console.log(`Result : ${result}`);
},
(error) => {
console.log(`Error : ${error}`);
}
);
// "Error : immediately Rejected" 출력
testPromise2.then(
(result) => {
console.log(`Result : ${result}`);
},
(error) => {
console.log(`Error : ${error}`);
}
);
then
메소드는 두 개의 매개변수를 받으며, Promise가 반환되거나 거부되었을 때에 해당되는 핸들러 함수이다.// Promise 최종 이행까지 총 6초 소요, 순차적으로 1, 2, 3이 반환됨
// 인자로 받은 배열의 index에 따라서 result 배열의 순서 또한 변경됨.
Promise.all([
new Promise((resolve) => setTimeout(() => resolve(1), 3000)), // 1
new Promise((resolve) => setTimeout(() => resolve(2), 2000)), // 2
new Promise((resolve) => setTimeout(() => resolve(3), 1000)), // 3
]).then((result) => console.log(result)); // [1, 2, 3]
Promise.all([
new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
new Promise((resolve, reject) =>
setTimeout(() => reject(new Error("에러 발생!")), 2000)
),
new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000)),
]).catch(alert); // Error: 에러 발생!
Promise.allSettled([
new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
new Promise((resolve, reject) =>
setTimeout(() => reject(new Error("에러 발생!")), 2000)
),
new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000)),
]).then((results) => results.forEach((result) => console.log(result.status))); // fulfilled, rejected, fulfilled
// 가장 짧은 시간 내에 끝난 첫번째 Promise의 결과가 return 됨.
Promise.race([
new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
new Promise((resolve, reject) =>
setTimeout(() => reject(new Error("에러 발생!")), 2000)
),
new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000)),
]).then((result) => console.log(result)); // 1