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
๋ด๋ถ์์ ๊ฐ์ธ๋ ์ ์ ๋ฉ์๋์
๋๋ค.
๊ตฌ๋ฌธ
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 ์ํ์ ํ๋ก๋ฏธ์ค๋ก ๋์ด์ฌ๋ฆฌ๊ธฐ ์ํ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
new Promise((resolve) => resolve(func()));
์ฌ๊ธฐ์๋ Promise.try()
๊ฐ ๋์ฑ ํจ๊ณผ์ ์
๋๋ค.
Promise.try(func);
๋ด์ฅ Promise()
์์ฑ์๋ ์คํ์๋ก๋ถํฐ ๋ฐ์๋ ์์ธ๋ฅผ ์๋์ ์ผ๋ก ๊ฐ์งํ๊ณ ๊ฑฐ๋ถ๋จ์ผ๋ก ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ์ฌํ์ง๋ง Promise.try()
๊ฐ ๋ ๊ฐ๋จํ๊ณ ๊ฐ๋
์ฑ์ด ์ข์ต๋๋ค.
Promise.try()
๊ฐ ์ด์ ์์ ํ ๋์ผํ ๊ฒ์ด ์๋๋ผ, ์๋นํ ์ ์ฌํ๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
Promise.resolve().then(func);
then()
์ ์ ๋ฌ๋ ์ฝ๋ฐฑ์ ํญ์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ Promise()
์์ฑ์์๋ ๋ค๋ฅด๊ฒ ํญ์ ๋น๋๊ธฐ์ ์ผ๋ก ํธ์ถ๋๋ค๋ ์ ์
๋๋ค. Promise.try
๋ ํจ์๋ฅผ ๋๊ธฐ์ ์ผ๋ก๋ ํธ์ถํ๊ณ ๊ฐ๋ฅํ๋ค๋ฉด ์ฆ์ ํ๋ก๋ฏธ์ค๋ฅผ ์ดํ ์ํ๋ก ๋ง๋ญ๋๋ค.
catch()
์ finally()
๊ฐ ๊ฒฐํฉ๋ Promise.try()
๋ ๋๊ธฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก ๋ฌถ์ด ์ฒ๋ฆฌํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก๋ฏธ์ค์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ง์น ๋๊ธฐ ์์ธ ์ฒ๋ฆฌ์ ๋น์ทํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ ์ ์์ต๋๋ค.
setTimeout()
์ฒ๋ผ, Promise.try()
๋ ์ฝ๋ฐฑ์ผ๋ก ์ ๋ฌ๋๋ ์ถ๊ฐ์ ์ธ ์ธ์๋ค๋ ์์ฉํฉ๋๋ค. ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด ์๋ ์์ ๋ฅผ ํ์ธํด ๋ณด์ธ์.
Promise.try(() => func(arg1, arg2));
์ด๋ ๊ฒ๋ ์์ฑํ ์ ์์ต๋๋ค.
Promise.try(func, arg1, arg2);
์ด๋ค์ ๋์ผํ ๋์์ ํ์ง๋ง ํ์๋ ์ถ๊ฐ์ ์ธ ํด๋ก์ ์์ฑ์ ๋ฐฉ์งํ ์ ์์ด ๋ ํจ์จ์ ์ ๋๋ค.
์์
Promise.try() ์ฌ์ฉํ๊ธฐ
๋ค์ ์์ ๋ ์ฝ๋ฐฑ์ ๋ฐ์์ ํ๋ก๋ฏธ์ค๋ก ๋์ด์ฌ๋ฆฌ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์ค๋ฅ ์ฒ๋ฆฌ๋ ์ํํฉ๋๋ค.
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 ๊ตฌ๋ฌธ์์๋ ๊ฐ์ ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ํํํ ์๋ ์์ต๋๋ค.
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()
์ ์ข ๋ ์ถฉ์คํ ๊ทผ์ฌ์น์
๋๋ค. (ํ์ง๋ง ํด๋ฆฌํ๋ก ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค.)
Promise.try = function (func) {
return new this((resolve, reject) => {
try {
resolve(func());
} catch (error) {
reject(error);
}
});
};
Promise.try()
์ (try...catch
๋ฅผ ์ด์ฉํ ๊ฒ๊ณผ ๊ฐ์) ๊ตฌํ ๋ฐฉ์ ๋๋ถ์ ์ด๋ค ์ปค์คํ
์์ฑ์์ this
๋ฅผ ์ค์ ํ์ฌ Promise.try()
๋ฅผ ์์ ํ๊ฒ ํธ์ถํ ์ ์๊ณ , ์ ๋๋ก ๋๊ธฐ์ ์ผ๋ก ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค.
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 |
๋ธ๋ผ์ฐ์ ํธํ์ฑ
Loadingโฆ