ES6 Promise - 创建完成态的Promise

我们在前一篇的文章里,介绍了怎么用Promise构造函数创建一个一开始是pending状态,最终为fulfilled或者rejected的Promise;因为这种类型的Promise有状态的变化,所以我们说它是动态类型的Promise。

我们也可以创建一个非动态(没有状态变化)的Promise,这种Promise我们把它叫做完成态Promise,也就是一旦创建好就是settled而不是pending状态。

对应于fulfilled和rejected两种状态,我们也有2种类型的已完成态Promise:

1: 已成功处理状态的Promise 相当于状态为fulfilled的Promise
2: 已拒绝状态的Promise 相当于状态为rejected的Promise

接下来我们看看创建以上2种Promise的语法:
1: 创建已成功处理状态的Promise - Promise.resolve()

let resolvedPromise = Promise.resolve('a');

resolvedPromise.then((value)=>{
    console.log(`the value is: ${value}`);
}, ()=>{
    console.log('This will never be called');
});

resolvedPromise.catch(()=>{
    console.log('This will never be called either');
});

打印结果为:

the value is: a

我们使用Promise.resolve()这个静态方法就可以创建一个fulfilled状态的Promise。需要特别注意的是,因为是fulfilled状态的Promise,所以它永远不存在rejected状态,因此该Promise的拒绝处理函数也永远不会被执行。

2: 创建已拒绝状态的Promise - Promise.reject()

let rejectedPromise = Promise.reject('a');

rejectedPromise.then(() => {
    console.log(`This will never be called`);
}, (value) => {
    console.log(`1 The value is: ${value}`);
});

rejectedPromise.catch((value) => {
    console.log(`2 The value is: ${value}`);
});

打印结果为:

1 The value is: a
2 The value is: a

因为是拒绝状态的Promise,所以此Promise的拒绝处理函数都可以得到执行,而成功状态的处理函数则永远不会被调用。

以上则是创建完成态Promise的语法以及特性。二者相对简单,只需要记住它们相应的处理函数会被调用而相反状态的处理函数永远不会被调用这一特性就行了。