async, await 반복문(promise.all)

이태혁·2020년 9월 16일
0
//test.txt
이 파일은 test.txt파일입니다.
//test1.txt
이 파일은 test1.txt파일입니다.
//test2.txt
이 파일은 test2.txt파일입니다.
//test3.txt
이 파일은 test3.txt파일입니다.
  • 위의 파일들을 읽어서 출력하는 async, await을 사용한 함수는 다음과 같다.
const fs = require('fs');
const fs_promises = require('fs').promises;

const asyncFunction = async () => {
  try {
    const data = await fs_promises.readFile('./test.txt', 'utf8');
    const data1 = await fs_promises.readFile('./test1.txt', 'utf8');
    const data2 = await fs_promises.readFile('./test2.txt', 'utf8');
    const data3 = await fs_promises.readFile('./test3.txt', 'utf8');
    const allData2 = data + data1 + data2 + data3;
    console.log(allData2);
    console.log('이 문장은 async, await 다음에 쓰여있습니다.')
  } catch(err1) {
    console.log(err1);
  }
};
asyncFunction();
  • 위 함수를 반복문(for)를 사용해 다음과 같이 표현할 수 있다.
const fs = require('fs');
const fs_promises = require('fs').promises;

let fileList = ['test.txt', 'test1.txt', 'test2.txt', 'test3.txt'];

const asyncFunction = async () => {
	try{
		for (const [i, r] of fileList.entries()){
			const data = await fs_promises.readFile(r, 'utf8');
			console.log(data);
		}
  } catch(err1) {
    console.error(err1);
  }
};
asyncFunction();
  • 또 다른 방법으로는 Promise.all을 사용해서 다음과 같이 쓸 수도 있다. 하지만 이 방법은 async함수들의 순서가 보장되지는 않는다.
const fs = require('fs');
const fs_promises = require('fs').promises;

let fileList = ['test.txt', 'test1.txt', 'test2.txt', 'test3.txt'];


const asyncFunction = async () => {
	try{
		await Promise.all(fileList.map(async (r) => {
			const data = await fs_promises.readFile(r, 'utf8');
			console.log(data);
		}));
  } catch(err1) {
    console.error(err1);
  }
};
asyncFunction();
profile
back-end, cloud, docker, web의 관심이 있는 예비개발자입니다.

0개의 댓글