게시일: 2025년 1월 17일
웹에서 비동기 작업을 실행하는 것은 쉽지 않을 수 있습니다. 웹에서 실행되는 많은 작업에는 비동기성이 포함됩니다. fetch
호출 또는 기타 비동기 작업이 포함되는지와 관계없이 내장 메서드가 강력한 오류 처리를 제공하는 경우 브라우저에서 작업을 더 쉽게 수행할 수 있습니다. 이는 이미 then
, catch
, finally
메서드를 사용하는 Promises에 제공되었습니다.
그렇더라도 애플리케이션의 코드베이스를 설계하는 방식은 유연해야 하며 애플리케이션에서 실행하는 모든 작업이 비동기식일 필요는 없습니다. Promise
에 전달한 콜백이 동기식인지 여부가 중요하지 않은 경우 더 간단한 방식으로 콜백의 결과를 처리하고 싶을 수 있습니다. Promise.try
는 이제 모든 주요 브라우저 엔진에서 사용할 수 있는 메서드로, 개발자가 이를 간소화할 수 있습니다. 즉, 이제 기준점으로 새로 사용할 수 있습니다.
Promise.try
란 무엇이며 어떻게 작동하나요?
Promise.try
는 Promise.resolve
를 사용하는 것보다 동기식 콜백 함수의 오류 처리를 더 쉽게 해주는 편의 메서드입니다.
// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());
// But it will be here:
Promise.try(callback);
그런 다음 then
, catch
, finally
메서드를 사용하여 Promise
의 확인 또는 거부를 처리합니다.
Promise.try(callback)
.then(result => console.log(result))
.catch(error => console.log(error))
.finally(() => console.log("All settled."));
콜백 함수에 인수가 있는 경우 어떻게 해야 하나요? 다음 두 가지 방법 중 하나로 이 문제를 처리할 수 있습니다.
// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));
// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);
Promise.try
를 사용하는 주된 이점은 전달하는 콜백이 동기식인지 비동기식인지와 관계없이 Promise를 일관되게 사용할 수 있다는 것입니다. 즉, 코드에서 널리 사용되는 Promise
에 콜백을 전달하는 유틸리티 함수의 경우 Promise.try
를 사용하면 전달하는 모든 콜백에 대해 적절한 오류 처리가 보장됩니다. 추가 정보와 기타 잠재적인 문제 또는 사용 사례는 Promise.try
의 MDN 문서를 참고하세요.
결론
이제 Promise.try
가 '새로 사용 가능' 기준점에 도달했으므로 모든 주요 브라우저 엔진에서 사용할 수 있습니다. 시간이 지남에 따라 Promise.try
가 웹 플랫폼의 안정적이고 상호 운용 가능한 부분이 될 것이라는 확신을 가지고 웹 애플리케이션에서 Promise.try
를 사용할 수 있을 것으로 기대됩니다.