
book_id가 null이라며 자꾸 오류가 나는 것이었다.aysnc와 await 다 잘 작성한 것 같은데 왜그러지 ???의심이 갔던 바로 한가지 forEach문!
items.forEach(async(item)=>{
let sql3 = `INSERT INTO orderedbooks (order_id, book_id, quantity)
VALUES (?,
(SELECT book_id FROM cartItems WHERE id = ?),
(SELECT quantity FROM cartItems WHERE id = ?));`;
val3 = [order_id,item,item];
result3 = await addData(sql3,val3,res)
};
})
반복문 중에 for of문이 있었기 때문에 코드를 for of으로 고쳐보았고
for (const item of items) {
let sql3 = `INSERT INTO orderedbooks (order_id, book_id, quantity)
VALUES (?,
(SELECT book_id FROM cartItems WHERE id = ?),
(SELECT quantity FROM cartItems WHERE id = ?));`;
val3 = [order_id,item,item];
result3 = await addData(sql3,val3,res)
};
결국 정상 작동!!!
forEach() expects a synchronous function — it does not wait for promises. Make sure you are aware of the implications while using promises (or async functions) as forEach callbacks.
promise를 기다려주지 않는다고 한다.
또한,forEach의 콜백함수는 호출만 하고 반환은 기다리지 않기 때문에 거의 동시에 호출된다고 생각해보면 비동기가 적용되지 않는다.