(async () => {
const info = await enterURL({
hostname: 'm.naver.com',
path: '/',
method: 'GET',
});
const links = info.links;
links.forEach(async (link) => {
const options = {
hostname: link.hostname,
path: link.path,
method: 'GET',
};
await enterURL(options);
});
const overalInfo = convertInfoToOveralInfo(infoContainer);
printOveralInfo(overalInfo);
})();
(async () => {
const info = await enterURL({
hostname: 'm.naver.com',
path: '/',
method: 'GET',
});
const links = info.links;
for (const link of links) {
const options = {
hostname: link.hostname,
path: link.path,
method: 'GET',
};
await enterURL(options);
}
const overalInfo = convertInfoToOveralInfo(infoContainer);
printOveralInfo(overalInfo);
})();
forEach 메소드는 배열의 각 요소를 순회하면서 콜백 함수를 비동기적으로 호출합니다. 이 때, 비동기적으로 호출되는 enterURL 함수의 실행이 끝나지 않아도 다음 enterURL 함수를 호출하게 됩니다. 따라서 forEach 메소드를 사용할 때에는 모든 enterURL 함수의 실행이 끝나기 전에 printOveralInfo 함수가 실행될 수 있습니다.
반면에 for 문은 동기적으로 실행되기 때문에 enterURL 함수의 실행이 끝나야 다음 enterURL 함수를 호출합니다. 따라서 for 문을 사용할 때에는 enterURL 함수의 실행이 모두 끝난 후에 printOveralInfo 함수가 실행될 것입니다.