반복문에서 비동기처리
const getMovies = movieName => {
return new Promise((resolve)=>{
fetch(`https://www.omdbapi.com/?apikey=7035c60c&s=${movieName}`)
.then(res => res.json())
.then(res => resolve(res));
})
}
const titles = ['frozen','avengers','avatar'];
titles.forEach(async title => {
const movies = await getMovies(title)
console.log(title, movies);
})
- forEach 라는 메서드 내부에서는 각각의 getMovies 라는 함수의 동작을 기다렸다가 다음 callback 으로 넘어가는것은 불가능하다.
그러하여 titles 에 들어가있는 내용 순서대로 출력이 안될수도 있다.
- 그래서 반복을 매번 기다려가면서 수행을 하려면 forEach를 쓰면 안되고 for 반복문을 사용해야한다.
const wrap = async () => {
for(title of titles){
await getMovies(title);
console.log(title, movies);
}
}
wrap()