정보실

웹학교

정보실

javascript JavaScript : 약속 및 비동기 / 대기 오류 처리

본문

특정 장소, 특히 Promises에서 까다로울 때 JavaScript의 오류 처리가 쉬울 수 있습니다. JS는 try, catch 및 throw를 사용하여 오류 처리를 허용합니다.


const main = () => {
  try {
    // Do something super crazy
    if (!bakePizza()) {
      throw new Error('Oh no!');
    }
  } catch (error) {
    // That escalated quickly
    handleOvenExplosion();
  }
}


https://dev.to/dbigpot/javascript-error-handling-with-promises-and-async-await-in-es6-3akc 


이것은 간단 해 보이지만 약속이 포함되면 약간 까다로워집니다.


Promise의 간단한 예를 살펴 보겠습니다. 다음 Promise 함수는 데이터베이스에서 사용자 프로파일 목록을 페치합니다. 여기서 약속 함수에 의해 결과 세트가 해석되고 오류가 거부됩니다.


const userProfileQuery = new Promise((resolve, reject) => {
  connection.query('SELECT * FROM Users', [], (err, result) => {
    if (err) reject({ type: 'SQL', err});
    connection.release();
    resolve(result);
});
userProfileQuery
  .then((data) => {
    const userList = data;
    // Do something crazy with the list
  })
  .catch((err) => {
    // Oh, snap!
    // Handle error
  });


이상적인 세계에서는 단일 파일에서 발생하는 모든 오류를 처리하기 위한 단일 try-catch 블록을 원합니다.


const { getUserProfiles } = require('./helpers');
module.exports = () => {
  try {
    let userProfileList;
    getUserProfiles
      .then((data) => {
        userProfileList = data;
      })
      .catch((error) => {
        // Handle Promise Error
        // All errors thrown in this promise land here
      });
  } catch (error) {
    // Handle errors in this module
  }
}

위의 모듈은 간단합니다. Promise 기능을 사용하여 사용자 프로필 목록을 가져옵니다.


그러나 위 모듈의 문제점은 우리가 약속의 then 블록 안에 새로운 오류를 던질 때 항상 약속의 catch 블록으로 전달된다는 것입니다. 약속의 then 블록 안에 새로운 오류를 던지는 것은 항상 호출 약속 함수의 catch 블록으로 전달되기 때문입니다. 따라서 단일 try-catch 블록이 있는 모듈의 모든 오류를 처리 할 수 ​​없습니다.


그러나 아아! Async / Await의 도움으로 이것을 처리하는 방법이 있습니다. 예를 들어 이것을 더 잘 설명하겠습니다.


const { getUserProfiles } = require('./helpers');
module.exports = async () => {
  try {
    const userProfileList = await getUserProfiles;
  } catch (error) {
    // Handle errors in this module
    switch (type) {
      case ERROR_SQL:
        // Handle SQL errors
      default:
        // Handle common errors
    }
  }
}

코드에 async / await를 조금만 추가하면 두 가지 작업을 수행 할 수 있습니다. promise 함수로 해결 된 변수에 값을 지정하십시오.


promise 함수가 아무것도 거부하면 오류가 발생합니다. 값 할당은 promise 함수가 일부 값을 해석하고 promise 함수가 무언가를 거부 할 때만 오류가 발생하는 경우에만 작동합니다.


이렇게 하면 async / await를 통해 코드를 깨끗하고 유지 관리 가능하며 읽기 쉽게 유지할 수 있습니다.



페이지 정보

조회 73회 ]  작성일19-10-21 22:41

웹학교