优点:
- 解决嵌套问题
- 控制反转再反转
局限性:
- 错误被吃掉
throw new Error('error');
console.log(233333);
// 因为 throw error的原因, 代码会被阻断执行,并不会打印233
const promise = new Promise(null);
console.log(233333);
// 无效的方式使用Promise 出现了一个错误阻碍了正常Promise的构造
let promise = new Promise(() => {
throw new Error('error')
});
console.log(2333333);
// 正常打印
Promise内部的错误不会影响到Promise外部的代码
并不是Promise独有的局限性, try...catch 也是这样,同样会捕获一个异常并且简单的吃掉错误
因为错误被吃掉,Promise链中的错误很容易被忽略掉,对于一个没有错误处理函数的Promise链,任何错误都会在链中传播下去,直到注册了错误处理函数
- 单一值
Promise只能有一个完成或一个拒绝的原因,有时候我们需要传递多个值,一般都是使用对象或者数组
- 无法取消
Promise一旦新建它就会立即执行,无法中途取消
- 无法得知pending状态
当处于pending状态时,无法得知目前进展到哪一个阶段