我们在前一篇的文章里,介绍了怎么用 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 的语法以及特性。二者相对简单,只需要记住它们相应的处理函数会被调用而相反状态的处理函数永远不会被调用这一特性就行了。