JavaScript 面试题
目录

如何创建和使用 Promise.resolve() 和 Promise.reject()?

· 约 4 分钟读完 · 第 114 / 507 章

推荐答案

Promise.resolve() 用于创建一个已解决(fulfilled)的 Promise 对象,而 Promise.reject() 用于创建一个已拒绝(rejected)的 Promise 对象。

Promise.resolve() 的使用:

Promise.reject() 的使用:

本题详细解读

Promise.resolve()

Promise.resolve() 是一个静态方法,它返回一个 Promise 对象,并且该对象的状态是已解决(fulfilled)。它接收一个参数,这个参数可以是任何值,包括:

  1. 普通值: 如果传入一个非 Promise 的值,例如数字、字符串、布尔值或对象, Promise.resolve() 将返回一个立即解决的 Promise,其解决的值为传入的参数。

  2. thenable 对象: 如果传入一个 thenable 对象(具有 then 方法的对象),Promise.resolve() 会尝试将该 thenable 对象转换为一个 Promise。转换过程中会调用 thenable 对象的 then 方法,并将新 Promise 的 resolve 和 reject 函数作为参数传入。如果 thenable 的 then 方法最终调用了 resolve,那么新 Promise 也将解决,反之则拒绝。

  3. Promise 对象: 如果传入一个 Promise 对象,Promise.resolve() 将直接返回该 Promise 对象,而不会进行任何修改。这在一些场景中很有用,比如需要确保某个值是 Promise 实例时。

Promise.reject()

Promise.reject() 是另一个静态方法,它返回一个 Promise 对象,并且该对象的状态是已拒绝(rejected)。它接收一个参数,该参数通常表示拒绝的原因(错误信息)。

应用场景:

  • Promise.resolve() 常常用于以下情况:

    • 将非 Promise 值转换为 Promise,以便进行 Promise 链式操作。
    • 在异步函数中,当需要立即返回一个成功状态的 Promise 时。
    • 将 thenable 对象转换为 Promise。
  • Promise.reject() 常常用于以下情况:

    • 在异步操作发生错误时,创建一个已拒绝的 Promise,并携带错误信息。
    • 在某些需要立即返回失败状态的 Promise 的场景。

示例解释:

在推荐答案的代码中,我们通过不同的例子演示了 Promise.resolve() 和 Promise.reject() 的用法。我们可以看到 Promise.resolve() 可以直接解决普通值,也可以通过 thenable 对象间接解决,而 Promise.reject() 则直接创建了一个拒绝状态的 Promise,并通过 catch 方法捕获错误。