This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

Promise.try()

Baseline 2025
Newly available

Since โจJanuary 2025โฉ, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Promise.try() ๋Š” ๋ฐ˜ํ™˜๊ฐ’์ด๋‚˜ ์˜ˆ์™ธ ๋ฐœ์ƒ, ๋™๊ธฐ๋‚˜ ๋น„๋™๊ธฐ์— ๊ด€๊ณ„ ์—†์ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ฝœ๋ฐฑ์„ ๊ฐ€์ง€๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Promise ๋‚ด๋ถ€์—์„œ ๊ฐ์‹ธ๋Š” ์ •์  ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

js
Promise.try(func)
Promise.try(func, arg1)
Promise.try(func, arg1, arg2)
Promise.try(func, arg1, arg2, /* โ€ฆ, */ argN)

ํŒŒ๋ผ๋ฏธํ„ฐ

func

์ฃผ์–ด์ง„ ์ธ์ž (arg1, arg2, โ€ฆ, argN) ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ˜ํ™˜๊ฐ’์ด๋“ , ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋“ , ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋“  ๊ทธ ์–ด๋–ค ๊ฒƒ์ด๋“  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

arg1, arg2, โ€ฆ, argN

func ์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜ ๊ฐ’

Promise ๋Š” ๋‹ค์Œ ๊ฐ’๋“ค์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • func ๊ฐ€ ๋™๊ธฐ์ ์œผ๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ์ด๋ฏธ fulfilled ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • func ๊ฐ€ ๋™๊ธฐ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋ฉด ์ด๋ฏธ rejected ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • func ์ด ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ๋น„๋™๊ธฐ์ ์œผ๋กœ fulfilled ํ˜น์€ rejected ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์„ค๋ช…

์ฝœ๋ฐฑ์„ ์ทจํ•˜๋Š” API๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ฝœ๋ฐฑ์€ ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ  ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ํ”„๋กœ๋ฏธ์Šค๋กœ ๊ฐ์‹ธ์„œ ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ Promise.resolve(func()) ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์ผ func() ๊ฐ€ ๋™๊ธฐ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋ฉด ์ด ์˜ˆ์™ธ๋Š” ๊ฐ์ง€๋˜์ง€ ์•Š๊ณ  rejected ํ”„๋กœ๋ฏธ์Šค๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ fulfilled๋‚˜ rejected ์ƒํƒœ์˜ ํ”„๋กœ๋ฏธ์Šค๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

js
new Promise((resolve) => resolve(func()));

์—ฌ๊ธฐ์„œ๋Š” Promise.try() ๊ฐ€ ๋”์šฑ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

js
Promise.try(func);

๋‚ด์žฅ Promise() ์ƒ์„ฑ์ž๋Š” ์‹คํ–‰์ž๋กœ๋ถ€ํ„ฐ ๋ฐœ์ƒ๋œ ์˜ˆ์™ธ๋ฅผ ์ž๋™์ ์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๊ฑฐ๋ถ€๋จ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋‘ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ ์œ ์‚ฌํ•˜์ง€๋งŒ Promise.try() ๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Promise.try() ๊ฐ€ ์ด์™€ ์™„์ „ํžˆ ๋™์ผํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•˜๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

js
Promise.resolve().then(func);

then() ์— ์ „๋‹ฌ๋œ ์ฝœ๋ฐฑ์€ ํ•ญ์ƒ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” Promise() ์ƒ์„ฑ์ž์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•ญ์ƒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. Promise.try ๋Š” ํ•จ์ˆ˜๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ๋„ ํ˜ธ์ถœํ•˜๊ณ  ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ฆ‰์‹œ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์ดํ–‰ ์ƒํƒœ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

catch() ์™€ finally() ๊ฐ€ ๊ฒฐํ•ฉ๋œ Promise.try() ๋Š” ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๋ฏธ์Šค์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜ ๋™๊ธฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ๋น„์Šทํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

setTimeout() ์ฒ˜๋Ÿผ, Promise.try() ๋Š” ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ์ธ์ž๋“ค๋„ ์ˆ˜์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

js
Promise.try(() => func(arg1, arg2));

์ด๋ ‡๊ฒŒ๋„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
Promise.try(func, arg1, arg2);

์ด๋“ค์€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜์ง€๋งŒ ํ›„์ž๋Š” ์ถ”๊ฐ€์ ์ธ ํด๋กœ์ € ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ

Promise.try() ์‚ฌ์šฉํ•˜๊ธฐ

๋‹ค์Œ ์˜ˆ์ œ๋Š” ์ฝœ๋ฐฑ์„ ๋ฐ›์•„์„œ ํ”„๋กœ๋ฏธ์Šค๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

js
function doSomething(action) {
  return Promise.try(action)
    .then((result) => console.log(result))
    .catch((error) => console.error(error))
    .finally(() => console.log("Done"));
}

doSomething(() => "Sync result");

doSomething(() => {
  throw new Error("Sync error");
});

doSomething(async () => "Async result");

doSomething(async () => {
  throw new Error("Async error");
});

async/await ๊ตฌ๋ฌธ์—์„œ๋Š” ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

js
async function doSomething(action) {
  try {
    const result = await action();
    console.log(result);
  } catch (error) {
    console.error(error);
  } finally {
    console.log("Done");
  }
}

ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์•„๋‹Œ ์ƒ์„ฑ์ž์—์„œ try() ํ˜ธ์ถœํ•˜๊ธฐ

Promise.try() ๋Š” ์ œ๋„ˆ๋ฆญ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Promise() ์ƒ์„ฑ์ž์™€ ๋™์ผํ•œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ์ƒ์„ฑ์ž์—์„œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์‹ค์ œ Promise.try() ์˜ ์ข€ ๋” ์ถฉ์‹คํ•œ ๊ทผ์‚ฌ์น˜์ž…๋‹ˆ๋‹ค. (ํ•˜์ง€๋งŒ ํด๋ฆฌํ•„๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.)

js
Promise.try = function (func) {
  return new this((resolve, reject) => {
    try {
      resolve(func());
    } catch (error) {
      reject(error);
    }
  });
};

Promise.try() ์˜ (try...catch ๋ฅผ ์ด์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€) ๊ตฌํ˜„ ๋ฐฉ์‹ ๋•๋ถ„์— ์–ด๋–ค ์ปค์Šคํ…€ ์ƒ์„ฑ์ž์— this ๋ฅผ ์„ค์ •ํ•˜์—ฌ Promise.try() ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , ์ ˆ๋Œ€๋กœ ๋™๊ธฐ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

js
class NotPromise {
  constructor(executor) {
    // "resolve" ์™€ "reject" ํ•จ์ˆ˜๋Š” ์–ด๋– ํ•œ ๋™์ž‘๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    // ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๋ฏธ์Šค์˜ Promise.try() ๋Š” resolve ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    executor(
      (value) => console.log("Resolved", value),
      (reason) => console.log("Rejected", reason),
    );
  }
}

const p = Promise.try.call(NotPromise, () => "hello");
// Logs: Resolved hello

const p2 = Promise.try.call(NotPromise, () => {
  throw new Error("oops");
});
// Logs: Rejected Error: oops

Promise() ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ NotPromise() ์ƒ์„ฑ์ž๋Š” ์‹คํ–‰์ž๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ์–ด๋– ํ•œ ์˜ˆ์™ธ๋„ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ throw ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Promise.try() ๋Š” ์˜ˆ์™ธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ reject() ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ช…์„ธ์„œ

Specification
ECMAScriptยฎ 2026 Language Specification
# sec-promise.try

๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ

๊ฐ™์ด ๋ณด๊ธฐ