주문하기 flow 오류 Await Async로 잡자~(근데 난 원래 쓰고있었어서 오류가 안나는)

동기방식으로
그러니까
callback으로 했을 때 생기는 오류는
저것처럼 주루룩 읽기때문에
기다려주지않음!!!!!!!이얏호~ 그래서 await async쓰면 기다려줍니다 우헤헥 우헥 우헤헤
Async/ Await/ Top-Level Await/ Promise/ Callback/ 동기,비동기 작업
코파일럿이top level await은 큰 문제인걸~ 하고 수정해줬다뭔소린지 도통 모르겠어서 처음부터 차근차근 왜 수정했는지 뭐가 문제인지 탐구해봤다 일단 동기식 비동기식이 먼지 알면 조음📌 동기
tin814.tistory.com
이미 공부했던 나애개 박수
논블로킹 = 비동기식

헐랭방구~ 근데 query가 비동기에서 쓰는 방식인 줄 몰라쓰요~

이렇게 써왔건만,,
Node.js 비동기 처리 방식
비동기 발생
실행되는 코드가 기다려야 하는 시간이 생긴다는 의미
이전 시간이 오래 걸려도 기다려주지 않고 다음 코드를 무작정 실행함
ex) setTimeOut(), setInterval(), query() ...
비동기 처리
비동기가 필요 없을 때가 있다
순서에 맞춰서 코드를 실행해주겠다!
1. 콜백함수 : 할 일 다 하고 이거 실행해줘(= 순서 맞춰서 이걸 뒤에 실행해달라고)
2. promise (resolve, reject)
3. then & catch
4. ES2017 promise => async & await
(사실 2,3,4번은 하나임)
Promise란
무조건 약속을 지킨다!! 해낸 일은 무조건 해내는 놈
"객체"임
// Promise : "객체"/ 약속을 지키는 친구
let promise = new Promise(); // 친구 소환
let promise = new Promise(function(resolve,reject){
// executor: 이 친구가 할 일(함수)
setTimeOut(()=> resolve("완료!"),3000);
// 일을 완료 했지민 출력은 안됐을 것
// 할 일을 성공적으로 끝내면 resolve(결과)
// 실패하면 reject(에러)
};
// promise의 기본 메소드 : promise가 일 다 하고 호출해야하는 함수
promise.then();
// 성공시 , 실패시
promise.then(function(result){} , function(error){});
순서를 줘 볼까용(promise then 메소드 체이닝)
let promise = new Promise(); // 친구 소환
let promise = new Promise(function(resolve,reject){
setTimeOut(()=> resolve("완료!"),3000);
}.then(
function(result){
console.log(result);
return result+ "!!!!!";
},
function(error){}
).then(
function(result){
console.log(result);
return result+ "??????";
},
function(error){})
.then(
function(result){
console.log(result);
},
function(error){}
)
// 콘솔창
완료!
완료!!!!!!
완료!!!!!!??????
Async/Await
Promise 객체를 좀 더 쉽고 편하게 사용할 수 있게 해줌
비동기 처리가 쉽다 !
async 함수
async function f() {
return 7;
}
// async는 Promise 객체로 반환하게 해줌
// Promise.resolve(7) 형식의 포장지가 기본으로 있는 거임!
f().then(
function(result){
console.log("promise resolve :",result);
},
function(error){
console.log("promise reject : ",error);
}
헐랭
항상 await async구문을 쓰면 try catch문을 쓰라고해서
엥? error는 자꾸 어디에서 받아오는 거지? 원래 있는 건가? 했는데????
Promise객체 자체가 실패하면 reject에서 error를 받아오는거라??
사용할 수 있었던 거임!! 허걱슨! 놀!랍!따!
Await
// async의 두 번째 기능
async function f() {
let promise = new Promise(function(resolve,reject){
setTimeout(()=>resolve("완료"),3000);
});
let result = await promise;
console.log(result);
}
f();
async안에서 await을 만나면
(await은 async안에서만 사용할 수 있음)
promise객체를 사용할 때 "그 promise 기다려줘!!!"라는 의미를 가짐
그래서
async함수의 기능 두 가지
1. return 값을 자동으로 Promise 객체로 보내주기
2. 안에서 await쓰고 기다려주기( 밖에서 쓰는 then 메소드를 안에서 await으로 써주기)
이게 바로 비동기처리
async function f() {
let promise1 = new Promise(function(resolve,reject){
setTimeout(()=>resolve("첫 번째 쿼리"),3000);
});
let result1 = await promise1;
// promise 객체가 일 다 할 때까지 기다려주기
console.log(result1);
let promise2 = new Promise(function(resolve,reject){
setTimeout(()=>resolve("두 번째 쿼리"),3000);
});
let result2 = await promise2;
console.log(result2);
let promise3 = new Promise(function(resolve,reject){
setTimeout(()=>resolve("세 번째 쿼리"),3000);
});
let result3 = await promise3;
console.log(result3)
}
f();
////// 콘솔창
(3초기다림)
첫 번째 쿼리
(3초기다림)
두 번째 쿼리
(3초 기다림)
세 번쨰 쿼리

아니 세상에
mysql2/promise가 단순히 promise에서 쓸 수 있게 해주는 것인 주ㅡㄹ 알았건만

모든 query를 Promise객체로 감싸지게 할 수 있게 해주는 거였다,,, 아니 혼마야
무슨 반전지리는 영화보는 것 같다..허걱슨,,,
.promise() 를 사이에 안넣는 이유는 이미 db를 async await으로 감싸줘서 ,,

mariadb에도 try catch await 을 ~ 붙여주면 promise 객체가 되,,,
원래,,, async await이라서 깃에 올릴게 없는걸요,,,
느낀점
헤엑 내가 아는 것은 진짜 겉핥기 이론 뿐이었따!!!
응용해보니 내가 모르고 그냥 의문을 가지고 넘어갔던 것들을 알 수 있었다... 허거덩스
너무