• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.02.23 07:51 작성 조회수 254

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

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

server1-1에서

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

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

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