ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js - 비동기 함수에서 순차 처리 (async/await)
    개발 2019. 6. 8. 11:22

    Node.js는 비동기 처리 방식을 권장하지만 상황에 따라서 비동기 함수들이 순차적으로 처리해야 하는 상황이 있다. 별다른 고려 없이 순차 처리를 지원하기 위해서는 콜백함수 내 콜백함수를 지정하게 되고 호출의 중첩이 심화되고 코드의 가독성이 심하게 떨어지게 되고, 개발 효율 또한 상당히 저하된다. (aka 콜백지옥)

     

    아래는 비동기함수를 이용하여 a.txt, b.txt, c.txt 3개 파일을 순차적으로 로드하는 코드이다.

    const fs = requre('fs')
    
    fs.readfile('a.txt', 'utf-8', (err, data) => {
    	console.log('read a.txt', data)
        fs.readfile('b.txt', 'utf-8', (err, data) => {
        	console.log('read b.txt', data)
            fs. readfile('c.txt', 'utf-8', (err, data) => {
            	console.log('read c.txt', data)
            })
        })
    })

    ECMA2015에서는 이런 문제를 해결하기 위해 Promise, Generator 를 지원하였으며,

    ES2017에서는 그 보다 더 쉽게 코드 작성할 수 있도록 async/await를 지원하고 있다. 

     

    Async/await를 활용하면 아래와 같은 코드 작성이 가능하다.

    const fs = requre('fs')
    
    function readFileEx(fname) {
      return new Promise((resolve, rect) => {
          fs.readFile(fname, 'utf-8', (err, data) => {
              resolve(data)
          })
      })
    }
    
    async funcation readAll () {
    	const a = await readFileEx('a.txt')
        const b = await readFileEx('b.txt')
        const c = await readFileex('c.txt')
        
        console.log(a)
        console.log(b)
        console.log(c)
    }
    
    readAll()

    '개발' 카테고리의 다른 글

    [독서] 5:5:5 코딩 교육  (0) 2019.10.27
    패스워드 관련 정규표현식  (0) 2019.08.31
    Protopie로 SmartThings 제어 프로토 타입 만들기  (0) 2019.06.07
    #1.1 Creating GraphQL Server  (0) 2019.05.08
    #1.0. Setting up the project  (0) 2019.05.07
Designed by Monster Factory