callback과 마찬가지로 비동기 처리를 순차적으로 처리하기 위한 방법
const promise = new Promise(function(resolve, reject) {
resolve();
reject(); // error가 발생 안하면 무시됨
});
function process(str, ms){
return new Promise(function(resolve, reject) {
setTimeout(() => {
resolve(str);
}, ms);
});
};
process('프로세스1', 1000).then(
data => console.log(data),
err => console.log(err)
);
function process(str, ms){
return new Promise(function(resolve, reject) {
setTimeout(() => {
reject(str);
}, ms);
});
};
process('실패', 1000).then(
data => console.log("완료!")
).catch(
err => console.log(err)
);
function process(str, ms){
return new Promise(function(resolve, reject) {
setTimeout(() => {
reject(str);
}, ms);
});
};
process('프로세스1', 1000).then(
data => console.log(data),
err => console.log(err)
).finally(
() => console.log("end");
);
여러 비동기 처리를 순차적으로 처리하기 위해서 promise chaining이라는 것을 이용한다.
callback에서 사용했던 예시를 사용해서 구현하면 아래와 같다.
이어서 실행해야할 프로세스를 then을 사용해서 엮으므로서 순차적 처리가 가능하며,
callback에서 나오는 callback 지옥도 예방할 수 있다.
function process(str, ms){
return new Promise(function(resolve, reject) {
setTimeout(() => {
console.log(str)
resolve();
}, ms);
});
};
console.log('start');
process('프로세스1', 1000).then(
() => process('프로세스2', 500)
).then(
() => process('프로세스3', 100)
).finally(
() => console.log("end")
);