[JS/Node] 비동기

play·2022년 5월 31일
0

JaveScript

목록 보기
9/10
post-thumbnail

Chapter1. 고차함수 리뷰

Chapter2. 비동기

Chapter3. Node.js


Chapter1. 고차함수 리뷰

  • 고차 함수는 전달인자(argument)로 함수를 넘겨줄 수 있다.
    • 고차 함수의 전달인자로 넘겨주는 함수 : 콜백 함수.
      작업 중에 호출하는 경우가 많아서, 업무 중 걸려온 전화에 답신하는 전화를 나타내는 콜백이란 이름이 붙여짐
  • 고차 함수는 다른 함수를 리턴할 수 있다.
    • 함수를 리턴하는 함수 : 커링함수.
      고차 함수란 용어를 '함수를 전달인자로 받는 함수'에만 한정해 사용하기도 함. 고차함수가 커링함수를 포함한다.
  • '함수를 리턴하는 함수', '함수를 전달인자로 받는 함수' 모두 고차함수.
  • 즉, 고차 함수는 콜백 함수와 커링 함수의 상위 개념이다.

Chapter2. 비동기

비동기 함수 전달 패턴1: callback 패턴

let request = 'caffelatte';
orderCoffeeAsync(request, function(response) {
  // response -> 주문한 커피 결과
  drink(response);
});

비동기 함수 전달 패턴2: 이벤트 등록 패턴

let request = 'caffelatte';
orderCoffeeAsync(request).onready = function(response) {
  // response -> 주문한 커피 결과
  drink(response);
};

Callback

비동기 함수의 순서를 제어하고 싶을 때 사용

ex)

const printString = (string, callback) => {
	setTimeout(() => {
		console.log(string);
		callback()
	},
	Math.floor(Math.random() * 100) + 1
 )
}

const printAll = () => {
	printString("A", () => {
		printString("B", () => {
			printString("C", () => {})
		})
	})
}
printAll();

단점 : 콜백헬 발생. 가독성 떨어짐

Promise

  • 콜백함수의 단점 보완
  • 쉽고 편하게 비동기 함수들 처리
  • Promise chaining 적절하게 시킬 필요가 있음.
  • new Promise();
  • 내장함수 : resolve() / reject()
  • .then() - resolve : 성공
  • .catch() = reject : 실패
const printString = (string) => {
	return new Promise((resolve, reject) => {
		setTimeout(
          () => {
		console.log(string);
		resolve();
		},
		Math.floor(Math.random() * 100) + 1
        )
	})
}
	

const printAll = () => {
	printString("A")
	.then(() => {
		return printString("B");
	})
	.then(() => {
		return printString("C"); 
	})
}
printAll();

async/await

Promise와 동일하게 작동하나 겉으로 보이는 모습은 다름.
promise보다 가독성이 좋다.


타이머 관련 API

  • setTimeout(callback, millisecond) : 일정 시간 후에 함수를 실행
setTimeout(function () {
  console.log('1초 후 실행');
}, 1000);
// 123
  • clearTimeout(timerId) : setTimeout 타이머를 종료
const timer = setTimeout(function () {
  console.log('10초 후 실행');
}, 10000);
clearTimeout(timer);
// setTimeout이 종료됨
  • setInterval(callback, millisecond) : 일정 시간의 간격을 가지고 함수를 반복적으로 실행
setInterval(function () {
  console.log('1초마다 실행');
}, 1000);
// 345
  • clearInterval(timerId) : setInterval 타이머를 종료
const timer = setInterval(function () {
  console.log('1초마다 실행');
}, 1000);
clearInterval(timer);
// setInterval이 종료됨.

Chapter3. Node.js

Node.js : "비동기 이벤트 기반 JavaScript 런타임"

Node.js 내장 모듈 사용방법

1. JavaScript 코드 가장 상단에 require 구문을 이용하여 다른 파일 불러오기

const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
const dns = require('dns'); // DNS 모듈을 불러옵니다

3rd-party 모듈 사용방법

공식적으로 제공하는 빌트인 모듈(built-in module)이 아닌 모든 외부 모듈


fs.readFile(path[, options], callback)

fs.readFile

1. path \<string> | \<Buffer> | \<URL> | \<integer>

  • path에는 파일 이름을 전달인자로 받음.
  • 네 가지 종류의 타입을 넘길 수 있지만 일반적으로 문자열(string)의 타입을 받음.
fs.readFile('/etc/passwd', ..., ...)
[코드] '/etc/passwd' 파일을 불러오는 예제

2.options \<Object> | \<string>

  • 대괄호로 감싼 두 번째 전달인자 options는 넣을 수도 있고, 넣지 않을 수도 있다.
  • 대괄호는 선택적 전달인자를 뜻함.
  • 문자열로 전달할 경우 : 인코딩을 받음
  • 객체로 전달할 경우 : 객체 형태로 받음
// /etc/passwd 파일을 'utf8'을 사용하여 읽습니다.
fs.readFile('/etc/passwd', 'utf8', ...);
[코드] 두 번째 전달인자 options에 문자열을 전달한 경우

3. callback \<Function>

  • 파일을 읽고 난 후에 비동기적으로 실행되는 함수
  • 에러가 발생하지 않으면 errnull 이 되며
  • data 에 문자열이나 Buffer 라는 객체가 전달됨
profile
블로그 이사했습니다 🧳

0개의 댓글