함수를 호출할 때, 1. 출력할 단어 2. 단어를 출력하는 함수 두 가지를 인수를 넘겨줌
const workA = (value, callback) => {
setTimeout(() => {
callback(value + 5);
}, 5000);
};
const workB = (value, callback) => {
setTimeout(() => {
callback(value - 3);
}, 3000);
};
const workC = (value, callback) => {
setTimeout(() => {
callback(value + 10);
}, 10000);
};
const workD = (value, callback) => {
callback(value);
};
workA(10, (resA) => {
console.log(`1. ${resA}`);
workB(resA, (resB) => {
console.log(`2. ${resB}`);
workC(resB, (resC) => {
console.log(`3. ${resC}`);
});
});
});
workD("workD", (res) => {
console.log(res);
});
비동기 함수의 결괏값을 또 다른 비동기 함수에서 사용하기 위해, 이렇게 콜백함수 안에 콜백함수를 전달하는 방식으로 전달하게 되면?
가독성이 매우 좋지 않은 코드가 되어 많은 오류를 발생시킨다 !
자바스크립트의 비동기 작업을 조금 더 쉽게 !
const executor = (resolve,reject) => {
}
const promise = new Promise(executor);
비동기 처리에 실패할 경우
reject함수가 실행
프로미스 객체의 state는 pending -> rejected / result는 undefined -> "실패" 로 변경
콘솔창에 아무것도 출력되지 않음
reject 함수를 사용해, 작업이 실패했을 때 결괏값을 사용하기 위해서는 catch 메서드를 사용
const workA = (value) => {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(value + 5);
}, 5000);
});
return promise;
};
const workB = (value) => {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(value - 3);
}, 3000);
});
return promise;
};
const workC = (value) => {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(value + 10);
}, 10000);
});
return promise;
};
workA(10).then((resA) => {
console.log(`1. ${resA}`);
workB(resA)
.then((resB) => {
console.log(`2. ${resB}`);
workC(resB).then((resC) => {
console.log(`3. ${resC}`);
});
})
.catch((error) => {
console.log(error);
});
});
계속해서 프로미스 객체를 반환하며, then 메서드를 연속으로 사용하는 것
const workA = (value) => {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(value + 5);
}, 5000);
});
return promise;
};
const workB = (value) => {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(value - 3);
}, 3000);
});
return promise;
};
const workC = (value) => {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(value + 10);
}, 10000);
});
return promise;
};
workA(10)
.then((resA) => {
console.log(`1. ${resA}`);
return workB(resA);
})
.then((resB) => {
console.log(`2. ${resB}`);
return workC(resB);
})
.then((resC) => {
console.log(`3. ${resC}`);
})
.catch((error) => {
console.log(error);
});
https://melonplaymods.com/2023/06/11/tank-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/metal-gear-rising-revengeancethe_foxan_mp-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/green-arm-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/apeirophobia-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/fighter-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/cameraken_kaneki-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/cactus-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/pacific-rim-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/stick-figure-fight-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/survival-kit-v-0-4-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/engineering-and-technical-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/slap-battles-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/one-night-at-flumptys-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/infected-melon-infected-watermelon-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/tank-carro-armato-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/technologist-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/bumblebee-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/ultraman-tiga-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/pack-for-many-items-from-minecraft-beta-2-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/small-prestigious-house-mod-for-melon-playground/