推荐答案
Promise.resolve() 用于创建一个已解决(fulfilled)的 Promise 对象,而 Promise.reject() 用于创建一个已拒绝(rejected)的 Promise 对象。
Promise.resolve() 的使用:
// www.javascriptcn.com code example
// 1. 直接传入一个值
const resolvedPromise1 = Promise.resolve(10);
resolvedPromise1.then(value => {
console.log(value); // 输出: 10
});
// 2. 传入一个 thenable 对象(具有 then 方法的对象)
const thenable = {
then: (resolve) => {
setTimeout(() => {
resolve("thenable resolved");
}, 100);
}
};
const resolvedPromise2 = Promise.resolve(thenable);
resolvedPromise2.then(value => {
console.log(value); // 输出: "thenable resolved" (会在 100ms 之后输出)
});
// 3. 传入一个 Promise 对象,会直接返回该 Promise 对象
const originalPromise = new Promise(resolve => resolve("original"));
const resolvedPromise3 = Promise.resolve(originalPromise);
resolvedPromise3.then(value => {
console.log(value); // 输出: "original"
});Promise.reject() 的使用:
const rejectedPromise = Promise.reject("Error occurred!");
rejectedPromise.catch(error => {
console.error(error); // 输出: "Error occurred!"
});本题详细解读
Promise.resolve()
Promise.resolve() 是一个静态方法,它返回一个 Promise 对象,并且该对象的状态是已解决(fulfilled)。它接收一个参数,这个参数可以是任何值,包括:
普通值: 如果传入一个非 Promise 的值,例如数字、字符串、布尔值或对象,
Promise.resolve()将返回一个立即解决的Promise,其解决的值为传入的参数。thenable 对象: 如果传入一个
thenable对象(具有then方法的对象),Promise.resolve()会尝试将该thenable对象转换为一个Promise。转换过程中会调用thenable对象的then方法,并将新Promise的resolve和reject函数作为参数传入。如果thenable的then方法最终调用了resolve,那么新Promise也将解决,反之则拒绝。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 方法捕获错误。