async function 함수명() {
await 비동기_처리_메서드_명(); // 비동기 처리 메서드가 꼭 프로미스 객체를 반환해야 await가 의도한대로 동작한다
}
function fetchItems() {
return new Promise(function(resolve, reject){
var items = [1,2,3]
resolve(items)
});
}
async function logItems() {
var resultItems = await fetchItems();
console.log(resultItems);
}
await를 사용하지 않았다면 데이터를 받아온 시점에 콘솔을 출력할 수 있게 콜백함수나 .then()을 사용했을 것이다.
function fetchUser() {
var url = 'https.//todo.com/users/1';
return fetch(url).then(function(response){
return response.json();
});
}
function fetchTodo() {
var url = 'https.//todo.com/todos/1';
return fetch(url).then(function(response){
return response.json();
});
}
// async await -> 기존 비동기 처리 코드 방식으로 사고하지 않아도 됨
async function logTodoTitle() {
var user = await fetchUser();
if (user.id === 1){
var todo = await fetchToDo();
console.log(todo.title);
}
}
try{}
, catch{}
를 활용해 블럭안에 넣기
// 일반
async function logTodoTitle() {
var user = await fetchUser();
if (user.id === 1){
var todo = await fetchToDo();
console.log(todo.title);
}
}
// try, catch
async function logTodoTitle() {
try {
var user = await fetchUser();
if (user.id === 1){
var todo = await fetchToDo();
console.log(todo.title);
}
} catch(error) {
console.log(error);
}
}
route: http://localhost:8000/programs/1
GET으로 프로그램 한개(url parameter)를 가져오려고 할 때
const findOneProgram = async (req, res, next) => {
try {
const { programId } = req.params
const program = await ProgramService.getOneProgram({ id: programId }) // await 사용
if (!program) {
const error = new Error('INVALID_INPUT')
error.statusCode = 400
throw error
}
res.status(200).json({ program })
} catch (err) {
res.status(err.statusCode).json({ message: err.message })
}
}
const getOneProgram = (field) => {
const [uniqueKey] = Object.keys(field)
const isKeyId = uniqueKey === 'id'
const value = isKeyId ? Number(field[uniqueKey]): field[uniqueKey]
return prisma.programs.findUnique({
where: {
[uniqueKey] : value
}
})
}
해당 링크에서 말하는 언제 Promise, async를 쓰는 법
Promise.all(promisesArray)
를 써라Reference:
캠판님 https://joshua1988.github.io/web-development/javascript/js-async-await/
https://betterprogramming.pub/should-i-use-promises-or-async-await-126ab5c98789