ECMAScript 2018

ECMAScript 2018 (ES9)에 추가된 일부 기능 정리

promise.prototype.finally

finally() 메서드의 경우 프라미스가 성공적으로 이행되었거나 거부되었는지 여부에 관계없이 코드를 실행할 수 있는 방법이다.

// MDN
function checkMail() {
  return new Promise((resolve, reject) => {
    if (Math.random() > 0.5) {
      resolve("Mail has arrived");
    } else {
      reject(new Error("Failed to arrive"));
    }
  });
}

checkMail()
  .then((mail) => {
    console.log(mail);
  })
  .catch((err) => {
    console.error(err);
  })
  .finally(() => {
    console.log("Experiment completed");
  });

위 코드를 실행해 보면, 성공/실패 유무에 상관없이 "Experiment completed"가 출력됨을 확인할 수 있다.

다만 finally() 함수의 순서는 상관이 있어, finally()를 맨 앞에 두면 성공/실패 유무에 상관없이 항상 맨 처음 실행된다. finally()의 좋은 사용 사례는 리소스를 정리할 때이다.

let connection;
db.open()
  .then((connect) => {
    connection = connect;
    return connection.select({ id: "a09e69a3-b9c8-4453-83fd-af7681e9cfbd" });
  })
  .then((result) => {
    // 커넥션을 활용하여 더 많은 쿼리를 만들 수 있다.
  })
  // ···
  .catch((error) => {
    // 에러 관련 처리
  })
  .finally(() => {
    // 성공/실패에 상관없이 리소스를 정리해 준다.
    connection.close();
  });

Last updated