July 06, 2020
동기함수는 처음 실행된 함수가 종료될때까지, 이후의 함수는 실행되지 않는다. 따라서 비동기함수를 활용하는 경우가 많다.
Node.js 할 때, readFile에 경로랑, 탐색 후 실행 콜백함수를 적고, 해당 콜백 함수 안에서 writeFile 기억남? 그때는 두번만 하면 됬던거라 짧았는데, 더 길어지면 위와같은 애로사항이 발생함
만약 처음함수가 실행되는데 오랜시간이 걸린다면?
대표적으로 콜백함수.
ex) function('원하는 인자', function('...'));
함수가 실행되고, 해당함수가 종료되면 콜백함수를 실행시켜라. 난 다른일을 하고 있을게.
이러한 콜백함수가 무수히 중첩되게되면
const loading = text => {
return new Promise((resolve, reject) => {
if (text === 'Fuck you') {
reject('Fuck you too!')
}
resolve('Hello!')
})
}
loading('Hello')
.then(result => {
console.log(result)
})
.catch(error => {
console.log(`${error}나 처먹어`)
})
function func(num) {
return new Promise((res, rej) => {
setTimeout(() => {
console.log(num++)
res(num)
}, 1000)
})
}
function func2(num) {
console.log(num)
return new Promise((res, rej) => {
setTimeout(() => {
num = num * 2
console.log(num)
res(num)
}, 1000)
})
}
function func3(num) {
console.log(num)
return new Promise((res, rej) => {
setTimeout(() => {
num = num * 10
console.log(num)
res(num)
}, 1000)
})
}
func(1)
.then(num => func2(num))
.then(num => func3(num))
function promise(num) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(num++)
resolve(num++)
}, 1000)
})
}
promise(1)
.then(num => promise(num))
.then(num => promise(num))
.then(num => promise(num))
.then(num => promise(num))
.then 메소드를 통해 순차적으로(동기) 실행하고자 하는 함수들은 모두 Promise객체를 반환해야 한다!
Promise
자체가 비동기함수가 아닌, setTimeout
과 같은 비동기 API
들의 성공, 실패 이후처리 등을 포착하고, 효율적으로 관리하기 위한 객체이다.
물론, 비동기
API
를 사용하지 않더라도resolve
혹은reject
를 즉시 실행시키거나 다른 환경에서 실행시켜 현재 구문을 일시 중단시키고 원하는 시기에 이어서 호출시킬 수 있다.