인프런 커뮤니티 질문&답변

Donggun Jang님의 프로필 이미지

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

fs로 HTML파일 읽어 제공하기

비동기 방식에서의 에러처리

23.02.23 07:51 작성

·

323

0

안녕하세요! 어제 유투브에서도 질문드렸었는데 잘 이해가 가지 않아 다시 질문드립니다.

184p server1-1.js

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
});
server.listen(8080);

server.on('listening', () => {
  console.log('8080번 포트에서 서버 대기 중입니다!');
});
server.on('error', (error) => {
  console.error(error);
});

어제 이 부분 에러처리를 try/catch로 하면 안되는건지 질문드렸었는데 server함수가 비동기로 진행되는거라 try/catch 적용하면 안된다고 답변받았었습니다.

 

186p server2.js

const http = require('http');
const fs = require('fs').promises;

http.createServer(async (req, res) => {
  try {
    const data = await fs.readFile('./server2.html');
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
    res.end(data);
  } catch (err) {
    console.error(err);
    res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end(err.message);
  }
})
  .listen(8081, () => {
    console.log('8081번 포트에서 서버 대기 중입니다!');
  });

그런데 바로 뒤에서 async를 사용하여 비동기임이 확실한데도 try/catch로 에러처리를 하신 부분이 나와서 잘 이해가 안갑니다..

뒷부분에서는 왜 try/catch를 적용해도 되는건지 궁금합니다!

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2023. 02. 23. 09:47

async 함수이지만 저 콜백 함수가 실행될 때는 내부가 동기적으로 순서대로 실행됩니다. try/catch는 동기적 코드거나 await 에러만 catch할 수 있습니다

Donggun Jang님의 프로필 이미지
Donggun Jang
질문자

2023. 02. 23. 10:26

server1-1에서

res.writeHead와 res.write의 결과 순서가 바뀔 수 있어서 비동기인건가요??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2023. 02. 23. 10:55

아뇨. on이 이벤트리스너잖아요. 이벤트리스너는 언제 호출될지 모르니 비동기이죠

Donggun Jang님의 프로필 이미지
Donggun Jang
질문자

2023. 02. 23. 10:56

아....놓치고있었습니다 감사합니다!