- BULK INSERT
- 비동기 처리
mysql2에서 여러개의 데이터를 한번에 INSERT할 때 사용한다.
sql = `INSERT INTO orderedBook (order_id, book_id, quantity) VALUES ?;`;
// cartItems 는 배열. 요소들을 하나씩 꺼내서(forEach 사용)
values = [];
cartItems.forEach((cartItem) => {
values.push([order_id, cartItem.book_id, cartItem.quantity]);
});
conn.query(sql, [values], (err, results) => {
if (err) return handleQueryError(err, res);
return res.status(StatusCodes.OK).json(results);
});
?
를 작성한다.현재 실행하고 있는 작업이 완료될때까지 기다리지 않고, 다른 작업을 수행하는 것을 말한다.
데이터베이스에 데이터를 INSERT했으나 비동기로 처리되기 때문에, INSERT되기 전에 다른 작업을 실행하는 문제가 발생했다.
전통적인 방식이다. 비동기 작업을 순차적으로 수행해야 할 때, 콜백 함수가 중첩되어 코드의 깊이가 깊어지는 콜백 지옥(callback hell)이 발생한다.
Promise
객체는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체이다.
let myPromise = new Promise(function (resolve, reject) {
setTimeout(() => resolve('완료!'), 3000);
});
myPromise.then(
function (result) {
console.log(result);
},
function (error) {
console.log(error);
}
);
myPromise.then(
function (result) {
console.log(result);
return result + '!!';
}
).then(
function (result) {
console.log(result);
return result + '!!';
}
).then(
function (result) {
console.log(result);
}
)
/*
완료!
완료!!!
완료!!!!!
*/
Promise 객체를 좀 더 편하게 사용할 수 있게 해주는 문법이다.
function getApple() {
return new Promise( (resolve, reject) => {
setTimeout(() => resolve("apple"), 1000);
})
}
async function getFruites() {
let apple = await getApple();
console.log(apple)
})
// apple