[TIL] 2022_03_07

hyomin·2022년 3월 7일
0

TIL

목록 보기
1/14


Node.js

이벤트 루프
Q. 실행 결과 예측해보기

function onMore(){
	console.log("one more");
};

function run(){
	console.log("run run");
    setTimeoute(()=>{
    	console.log("wow")
    },0)
  new Promise((resolve)=>{
    resolve("hi")
  }).then(console.log);
  onMore();
}

setTimeout(run,5000);

  • 호출 스텍
  • 백그라운드
  • 태스크 큐
  • setTimeout은 백그라운드에서 처리되는 비동기 함수이다. 백그라운드 영역에서는 input 순서 없이 처리가 끝나는 대로 결과를 테스크 큐로 옮긴다.

  • 태스크 큐는 호출 스택이 비어져있을 때 실행된다.

  • Promise에 then이 붙을 때 비동기 처리가 된다.

    Promise란?
    콜백 헬이라고 불리는 지저분한 자바스크립트 코드의 해결책이 될 수 있다
    : 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체
    then을 붙이면 결과를 반환한다.

resolve(value) — 일이 성공적으로 끝난 경우 그 결과를 나타내는 value와 함께 호출
reject(error) — 에러 발생 시 에러 객체를 나타내는 error와 함께 호출
요약하면 다음과 같습니다. executor는 자동으로 실행되는데 여기서 원하는 일이 처리됩니다. 처리가 끝나면 executor는 처리 성공 여부에 따라 resolve나 reject를 호출합니다.

let promise = new Promise(function(resolve, reject) {
  // executor (제작 코드, '가수')
});

then이란?

let promise = new Promise(function(resolve, reject) {
  setTimeout(() => reject(new Error("에러 발생!")), 1000);
});
// reject 함수는 .then의 두 번째 함수를 실행합니다.
promise.then(
  result => alert(result), // 실행되지 않음
  error => alert(error) // 1초 후 "Error: 에러 발생!"를 출력
);

.then의 첫 번째 인수는 프라미스가 이행되었을 때 실행되는 함수이고, 여기서 실행 결과를 받습니다.
.then의 두 번째 인수는 프라미스가 거부되었을 때 실행되는 함수이고, 여기서 에러를 받습니다.

A. run run -> one more ->hi[백그라운드]-> wow[백그라운드]

논블로킹 vs 블로킹

논블로킹블로킹
이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행함작업이 끝나야만 다음 작업을 수행함

논블로킹 처리

setTimeout(콜백,0) // 하지만 논블로킹과 동시가 같은 의미가 아니다.

profile
🌱

0개의 댓글