promise.resolve 和 promise.reject 是创建已决议 promise 的快捷方式,用于统一异步接口、安全抛出异步错误、增强 async/await 语义及配合 promise.all 使用,默认不改变同步性但提升控制流一致性。

Promise.resolve 和 Promise.reject 是创建已决议 Promise 的快捷方式,适合快速封装同步值或错误,避免手动 new Promise 的冗余代码。
用 Promise.resolve 包装同步值,统一异步接口
当函数需要返回 Promise 但实际逻辑是同步的(比如缓存命中、配置读取),直接用 Promise.resolve 可以让调用方始终以 .then() 处理,无需判断类型。
- Promise.resolve(42) → 立即 fulfilled 的 Promise,值为 42
- Promise.resolve(Promise.resolve(100)) → 自动扁平化,等价于 Promise.resolve(100)
- Promise.resolve({ then: resolve => resolve('ok') }) → 会识别 thenable 并等待其完成
用 Promise.reject 抛出可捕获的异步错误
在异步流程中提前终止并传递错误时,Promise.reject(error) 比 throw 更安全——它确保错误走 Promise 链的 catch 分支,不会意外触发未处理 rejection。
- Promise.reject(new Error('API not found')) → 立即 rejected 的 Promise,原因即该 Error 实例
- 和 throw 不同,它不中断当前执行栈,适合在条件分支中“返回一个失败结果”
- 常用于参数校验失败时:if (!url) return Promise.reject(new TypeError('URL required'))
配合 async/await 使用更自然
在 async 函数中,return Promise.resolve(x) 等价于 return x;但显式使用能增强语义——表明此处有意构造异步上下文。
- async function getData() { if (cached) return Promise.resolve(cached); return fetch('/api').then(r => r.json()); }
- Promise.reject 在 async 中等效于 throw,但更明确表达“这不是运行时异常,而是业务失败”
- 搭配 Promise.all 时,用 Promise.resolve() 填充默认项可避免空数组或条件缺失导致的逻辑断裂
不复杂但容易忽略:它们不是“让同步变异步”的魔法,而是把确定结果包装成 Promise 形态,让控制流更一致、错误更可控。











