promise执行顺序

360 阅读1分钟

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来获取