You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动创建已决议(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:01:26