1. async/await
- Promise then을 한 번 더 축약한 것
- Promise 지옥에서 벗어날 수 있다.
- Promise는 왼쪽에서 오른쪽으로 읽지만,
async/await은 오른쪽에서 왼쪽으로 읽어줘야한다.
//promise 함수
function findAndSaveUser(Users){
Users.findOne({}) //Users에서 객체 하나를 반환해라.
.then((user) => { //성공하면 user에 {name: 'zero} 를 넣어라.
user.name = 'zero'
return user.save() //프로퍼티를 추가한 user를 저장해라.
})
.then((user) => { //결과값으로 받아온 user를 이용해
return Users.findOne({ gender: 'm' }) //Users에서 조건에 맞는 객체 하나를 반환해라.
})
.then((user) => {
....
})
}
- await은 promise의 then의 역할을 해준다.
//async/await
async function findAndSaveUser(Users){
let user = await Users.findOne({}) //Users에서 객체 하나를 반환했다면 user에 넣어라.
user.name = 'zero' //user에 {name: 'zero'} 프로퍼티를 넣어라.
user = await user.save() //user를 저장했다면 user에 넣어라.
user = await Users.findOne({gender: 'm'}) //Users에서 조건에 맞는 객체 하나를 찾았다면 user에 넣어라.
...
}
- user : 결과값
- await : then
- Users.findOne({ }) : 프로미스
=> Users.findOne({ })을 실행해서 await한다면 user에 결과값을 넣어라.
2. 요즘은 async 함수 없이 await만 사용해서 쓸 수 있다.
3. async에서 return한 결과값을 then으로 받아야한다.
async function main(){
const result = await promise
return 'zerocho'
}
main().then((name)=> ~~~)
const name = await main()
4. try/catch
- async/await에서 reject를 처리하려면 try/catch구문으로 감싸줘야 한다.
async function main(){
try{
const result = await promise //promise를 실행하여 성공하면 result에 값을 넣어라.
return result
} catch(error){ //에러가 난다면 에러를 출력해라.
console.error(error)
}
}
5. promise 반복문
const promise1 = promise.resolve('성공1')
const promise2 = promise.resolve('성공2')
(async ( ) => {
for await(promise of [promise1, promise2]){ //promise로 배열을 만든 후 각 프로미스를 순환하면서 성공했다면
console.log(promise) //성공한 프로미스의 콘솔로그를 실행해라.
}
})( ) //()()함수는 즉시 실행 함수이다.
728x90
'Node.js' 카테고리의 다른 글
널병합 연산자 / 옵셔널 체이닝 (0) | 2023.06.29 |
---|---|
<Map / Set> (0) | 2023.06.29 |
비동기 : Promise (0) | 2023.06.28 |
class (0) | 2023.06.28 |
구조분해할당 (0) | 2023.06.28 |