JavaScript-自测题19

什么是Promise

Promise是抽象异步处理对象以及对其进行各种操作的组件,其实Promise就是一个对象,用来传递异步操作的消息,它不是某门语言特有的属性,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象,Promise对象有以下两个特点:

  1. 对象的状态不受外界影响

  2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果

Promise也以下缺点:

  1. 无法取消Promise,一旦新建它就会立即执行,无法中途取消。

  2. 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。

  3. 当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

Promise/A+规范的Promise

Promise/A+是Promise的一个主流规范,浏览器,node和JS库依据此规范来实现相应的功能,以此规范来实现一个Promise也可以叫做实现一个Promise/A+。

  • 类和构造器的构建

  • Promise.prototype.then链式支持

  • 静态方法Promise.resolve

  • 静态方法Promise.reject

  • 静态方法Promise.all

1
2
3
4
/**
* all方法,可以传入多个promise,全部执行完后会将结果以数组的方式返回,如果有一个失败就返回失败
* 静态方法为类自己的方法,不在原型链上
*/
  • 静态方法Promise.race
1
2
3
4
5
事务
/**
* race方法,可以传入多个promise,返回的是第一个执行完的resolve的结果,如果有一个失败就返回失败
* 静态方法为类自己的方法,不在原型链上
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const pro = new Promise((resolve, reject) => {
const innerpro = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
})
console.log(2);
resolve(3);
})
innerpro.then(res => console.log(res));
resolve(4);
console.log("yideng");
})
pro.then(res => console.log(res));
console.log("end");

解析:

优先执行内部嵌套的new Promise,console.log(2) 然后执行console.log("yideng")
pro.then等待
先执行console.log("end")
然后执行嵌套内部的resolve(3)
在执行外部的resolve(4)