1.Promise对象表示一个未完成,但预计将会完成的操作。
状态(面试题):
1.pending 初始值 未决定的,将要发生的
2.resolved/fulfilled 操作成功
3.rejected 操作失败
状态的变化:
1.pending=>fulfilled
2.pending=>rejected
【注意】 1.状态只要发生变化,就不会再修改了,promise的状态只会改变一次。
// 主要考察同步异步 以及异步之间的执行顺序
const promise = new Promise((resolve, reject) => {
console.log(1);
resolve(); //异步函数:里面的代码不会立即执行
console.log(2);
reject('error'); //异步函数
})
promise.then(() => {
console.log(3);
}).catch(e => console.log(e))
console.log(4);
//同步代码执行完成后:1 2 4
//开始执行异步函数 resolve执行后,输出3 1 2 4 3;
//resolve执行后,promise的状态就会从pendding => fulfilled
//promise的状态只会改变一次。 reject函数再去执行的时候,就不会生效。
2.Promise.all
* 格式: Promise.all([promise对象数组])
* 返回一个新的promise,只有所有的promise都成功了,返回的这个promise状态才是成功,只要有一个失败,则返回的promise就是失败的
*
*
* 假设:你要在某宝上买衣服。
*
* 支付:
* 1.查询余额够不够。
* 2.商品的库存够不够
* 3.创建订单会不会成功。(服务器繁忙)
*
* 发送多个异步请求时,如果有一个失败,则整个操作就不能成功,就可以使用Promise.all这个方法。
let p1 = new Promise((resolve, reject) => {
resolve("ok")
})
let p2 = new Promise((resolve, reject) => {
resolve("no")
})
let p3 = new Promise((resolve, reject) => {
resolve("nice")
// reject('1')
})
let p4 = Promise.all([p1, p2, p3]);
console.log(p4.then(val => {
console.log(val)
return val
}));
打印结果: [[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Array(3)
(3) ['ok', 'no', 'nice']//如果想要[[PromiseResult]]的内容需要用then来获取