跳转到主内容
思享编程网:思考分享,玩转编程世界!

Promise.resolve、Promise.reject、Promise.all到底怎么用?

大家好,我是陆砚码。今天我们来聊聊JavaScript中的Promise对象,特别是其中的三个重要方法:Promise.resolve、Promise.reject和Promise.all。它们是处理异步操作的好帮手,能让你写出更清晰、更易维护的代码。

Promise.resolve

Promise.resolve是用来将一个值转换为一个已解决(resolved)状态的Promise对象的。不管你传入的是什么,它都能帮你变成Promise对象。

  • 如果传入的是一个普通值,它会创建一个新的Promise对象,状态为已解决,其解决值就是传入的参数。
  • 如果传入的是一个Promise对象,它会直接返回这个Promise。
  • 如果传入的是一个具有then方法的对象(thenable),它会将这个对象转换为一个Promise并执行其then方法。

这样做的场景有很多,比如统一返回值类型,处理同步和异步操作的统一接口等等。

const resolvedPromise = Promise.resolve(42);
resolvedPromise.then((value) => {
    console.log(value); // 输出: 42
});

const originalPromise = new Promise((resolve) => {
    setTimeout(() => {
        resolve('Hello');
    }, 1000);
});
const newPromise = Promise.resolve(originalPromise);
newPromise.then((value) => {
    console.log(value); // 输出: Hello
});

const thenable = {
    then: function (resolve) {
        resolve('World');
    }
};
const promiseFromThenable = Promise.resolve(thenable);
promiseFromThenable.then((value) => {
    console.log(value); // 输出: World
});

Promise.reject

Promise.reject是用来创建一个已拒绝(rejected)状态的Promise对象的。它接受一个参数,这个参数将作为Promise被拒绝的原因。

你可以用它来模拟异步操作失败,或者在异步操作中发现不符合条件的情况时,提前终止后续的操作。

const rejectedPromise = Promise.reject(new Error('Something went wrong'));
rejectedPromise.catch((error) => {
    console.error(error.message); // 输出: Something went wrong
});

Promise.all

Promise.all接受一个可迭代对象(通常是数组)作为参数,该数组中的每个元素都是一个Promise对象。它会返回一个新的Promise对象,这个新的Promise对象会在数组中所有的Promise都成功解决时才会解决。

这个方法非常适合并行处理多个异步操作,比如同时发起多个异步请求,并且需要等待所有请求都完成后再进行下一步操作。

const promise1 = new Promise((resolve) => {
    setTimeout(() => {
        resolve('Result 1');
    }, 1000);
});

const promise2 = new Promise((resolve) => {
    setTimeout(() => {
        resolve('Result 2');
    }, 2000);
});

const promise3 = new Promise((resolve) => {
    setTimeout(() => {
        resolve('Result 3');
    }, 1500);
});

Promise.all([promise1, promise2, promise3]).then((results) => {
    console.log(results); // 输出: ['Result 1', 'Result 2', 'Result 3']
}).catch((error) => {
    console.error(error);
});

这就是Promise.resolve、Promise.reject和Promise.all的基本用法。希望这篇文章能帮助你更好地理解它们,写出更优秀的代码。我是陆砚码,如果你对编程有任何疑问,欢迎来「思享编程网」(www.sxgpb.com)找我。

相关文章