기록을 불러오는 중입니다...
Promise.try(someFunction);
Promise.try 함수의 인자로 콜백 함수를 넘겨주면 끝입니다. 이 콜백 함수는 동기 함수일 수도 있고 비동기 함수일 수도 있습니다. 만약 콜백 함수가 인자를 받는다고 한다면, 다음과 같이 인자를 바인딩해줄 수 있습니다.Promise.try(someFunction, arg1, arg2, arg3, ...);
const somePromise = new Promise((resolve) => {
// ...
resolve(someValue);
// ...
});
someFunction이 값을 반환해서 함수가 종료된 시점에 이행될 값을 지정하지만, 후자의 경우에는 함수가 종료되기 전 아무때나 이행될 값을 지정할 수 있습니다. 단순한 함수라면 전자의 용법이 깔끔하고 보기 좋고, 그렇지 않다면 후자가 나아 보입니다.Promise.resolve(value);
value 부분에 표현식을 넣으면 해당 표현식을 "resolve" 한 프로미스로 만들어줍니다. 여기서 "resolve" 라는 단어는 "fulfilled" 혹은 "rejected"와 엄연히 다릅니다.new Promise(resolve => {
resolve(42); // Promise는 즉시 fulfilled 상태로 전환됩니다.
});
const p1 = new Promise((resolve1, reject1) => {
setTimeout(() => resolve1("p1 성공"), 1000);
});
const p2 = new Promise((resolve2, reject2) => {
console.log("p2가 p1을 resolve합니다.");
resolve2(p1); // p2의 상태는 p1의 상태를 따르게 됩니다.
});
p2.then(result => console.log("p2 결과:", result));
// 출력:
// p2가 p1을 resolve합니다.
// (1초 후) p2 결과: p1 성공
p2 프로미스는 p1 프로미스로 "resolved" 되었습니다.p2는 resolve2(p1)이 호출되는 순간 resolved 상태가 됩니다.p2는 아직 pending 상태이며, p2의 최종 상태는 p1의 최종 상태에 따라 결정됩니다.p1이 거절된다면, p2 역시 거절됩니다.resolve 로 쓰기 때문이 아닐까 싶습니다.Promise.resolve 는 말 그대로 미래가 고정된 프로미스를 반환합니다.Promise.resolve(value);value 에 non-thenable 값을 전달하면 즉시 이행된 프로미스를 반환하며, thenable 값을 전달하면 새롭게 프로미스로 래핑하지 않고, 인자로 받은 녀석을 그대로 반환합니다.const original = Promise.resolve(33);
const cast = Promise.resolve(original);
cast.then((value) => console.log(`value: ${value}`));
console.log(`original === cast ? ${original === cast}`);
// Logs, in order:
// original === cast ? true
// value: 33
original 프로미스 객체와 cast 프로미스 객체는 서로 참조가 동일함을 통해 별다른 래핑 과정 없이 그대로 넘겨준다는 것을 알 수 있습니다.