如何手动创建已决议(Resolved)/已拒绝(Rejected)的Promise对象?
如何快速创建已Resolved或Rejected状态的Promise
嘿,你问的这个问题刚好有个超级简洁的解决方案——JavaScript原生就提供了Promise.resolve()和Promise.reject()方法,专门用来直接生成处于已决议状态的Promise,完全不用像之前那样写自定义函数来包裹!
原生方法的基础用法
- 创建已Resolve的Promise:用
Promise.resolve(值),它会直接返回一个已经完成决议的Promise,参数就是这个Promise的成功值。 - 创建已Reject的Promise:用
Promise.reject(原因),同理,返回一个已经被拒绝的Promise,参数是拒绝的原因(通常是错误信息或Error对象)。
改造你的代码示例
把你原来的fakeMulti函数里的占位符和自定义函数替换成这两个原生方法,代码会清爽很多:
function fakeMulti() { return new Promise(function(res, rej) { const promises = []; // inst 01 const flag = true; // 加入resolved状态的Promise if(flag) { promises.push(Promise.resolve("RESOLVE")); } else { promises.push(Promise.reject("REJECT")); } // inst 02 const flag2 = false; // 加入rejected状态的Promise if(flag2) { promises.push(Promise.resolve("RESOLVE")); } else { promises.push(Promise.reject("REJECT")); } // 处理Promise.all的结果 Promise.all(promises) .then(() => res("FAKE MULTI PASS")) .catch(() => rej("FAKE MULTI FAIL")); }); }
额外小细节
顺便提一句,如果你给Promise.resolve()传入的本身就是一个Promise对象,它会直接返回这个Promise,不会再包装一层,这在处理不确定类型的值时特别有用。
这样改造后,你再也不用维护那个forcePromise函数了,原生方法既简洁又可靠!
内容的提问来源于stack exchange,提问作者TheLovelySausage
相关产品推荐
相关产品推荐

