기록을 불러오는 중입니다...
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는 p1의 결과에 따르도록 미래가 고정되었습니다.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 프로미스 객체는 서로 참조가 동일함을 통해 별다른 래핑 과정 없이 그대로 넘겨준다는 것을 알 수 있습니다.