반응형
javascript(react, next...)개발시 비동기는 거의 필수입니다. 그리고 콜백함수 지옥에 빠지지 않기 위해 async await 패턴을 많이 쓰죠.
(callback) => {
callback((callback) => {
callback((callback) => {
callback((callback) => {
callback()
})
})
})
}
오늘은 async await 사용대신, promist pattern을 이용해 비동기 함수를 직접 만들어볼까합니다.
#대표적인 경우
let asyncFunc = new Promise((resolve) => {
setTimeout(() => {resolve("Success!")}, 10000); //ms 단위이기에, 10초뒤 resolve를 실행합니다
});
asyncFunc.then((res) => {
console.log(res) // 10초뒤 Success를 띄웁니다
})
비동기 함수 사용시 .then()도 있지만, 에러 발생시 실행시키는 .catch()도 있습니다. 에러 발생시 실행시키는 경우도 다뤄보도록 하겠습니다.
#.catch()사용하기 위한 경우
let asyncFunc = new Promise((resolve, reject) => {
setTimeout(() => {reject("Success!")}, 10000); //ms 단위이기에, 10초뒤 reject를 실행합니다
});
asyncFunc
.then((res) => {
console.log(res) // 10초뒤 Success를 띄우지 않습니다
})
.catch((err) => {
console.log("err") // 10초뒤 "err" 띄웁니다
console.log(err) // 10초뒤 Success를 띄웁니다
})
단 .then(), .catch()가 아닌 async await을 사용시 에러구분이 불가합니다.
let asyncFunc = new Promise((resolve, reject) => {
setTimeout(() => {resolve("Success!")}, 10000); //ms 단위이기에, 10초뒤 reject를 실행합니다
});
async () => {
let a = await asyncFunc
conosle.log(a) // Success
}
let asyncFunc = new Promise((resolve, reject) => {
setTimeout(() => {reject("Success!")}, 10000); //ms 단위이기에, 10초뒤 reject를 실행합니다
});
async () => {
let a = await asyncFunc
conosle.log(a) // 에러 발생했다 해도, resolve와 똑같은 Success alert
}
요약:
@ 비동기 함수 작성시 promise 패턴을 이용한다
@ async await 사용시, 에러 구분 없이 응답결과를 리턴한다
이상입니다!
코드가 보기 어려우시면 이 링크를 참조해주세요:
'개발 > react 생태계' 카테고리의 다른 글
csr(client-side-render)와 ssr(server-side-render)차이 (0) | 2020.07.02 |
---|---|
node.js와 next.js가 눈에 들어온 이유 (0) | 2020.06.29 |
for문 error in javascript, react.js, cra(create-react-app) (0) | 2020.06.22 |
Warning: Failed prop type: You provided a `value` prop to a form field without an `onChange` handler. (0) | 2020.06.18 |
비동기 처리 in react (0) | 2020.06.15 |