https://velog.io/@loopy/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0
지난 번에 비슷한 내용을 정리한 적이 있는데, 둘의 차이를 명확하게 기억하기 위해 차이점을 중심으로 다시 한 번 작성합니다!
function async(callback) {
setTimeout(() => {
callback("1초 후 실행");
}, 1000);
}
async(function (msg) {
console.log(msg);
});
async
함수는 첫 번째 인자로 callback을 받고, callback이 실행될 때 첫 번째 인자를 console에 출력(실행 시점은 setTimeout으로 인해 1초 후)function async() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("1초 후 실행");
}, 1000);
})
}
async().then(res => {
console.log(res);
});
.then
의 첫 번째 인자로, reject는 .catch
의 첫 번째 인자로 입력👉🏻 비동기 로직의 결과를 다음 비동기로 전달해서 실행해야 할 때, callback은 점점 깊어져 가독성이 떨어지고 코드 작성이 힘들어짐
function async(result, callback) {
setTimeout(() => {
callback(result, function (result) {
console.log(result);
});
}, 1000);
}
async(0, function (res, callback) {
callback(res)
async(res + 1, function (res, callback) {
callback(res)
async(res + 1, function (res, callback) {
callback(res)
});
});
});
// 0
// 1
// 2
👉🏻 Promise를 사용할 경우 .then
을 통해 코드가 깊어지지 않고 이해가 쉬움
function async(result) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(result);
resolve(result);
}, 1000)
});
}
async(0).then(res => {
return async(res + 1);
}).then(res => {
return async(res + 1);
})
// 0
// 1
// 2