概念:Promise主要解决了异步调用互相依赖,就是常说的死亡回调。当你调用一系列异步方法时,使用promise可以让多个操作按照你的想法执行,实现序列化。

Promise有3种状态:

  1. Pending:进行中
  2. Resolved(Fulfilled):已完成
  3. Rejected:已失败

Promise构造器接受一个函数作为参数,这个函数有两个参数:resolve,reject,分别代表这个Promise实例成功之后的回调函数和失败之后的回调函数。

    let promise = new Promise(function (resolve, reject) {
        var a = 1
        if (a == 1) {
            resolve(a)
        } else {
            reject(error)
        }
    })
    promise.then(function (value) {
        console.log(value);
    }).catch(function (error) {
        console.log(error);
    })
  // 结果输出 1

 promise多步调用:

    let ajax=function(){
        console.log('执行');
        return new Promise(function(resolve){
            setTimeout(function () {
                resolve()
            }, 2000);
        })
    };
    ajax()
        .then(function(){
            console.log("第一次then")
            return new Promise(function(resolve){
                setTimeout(function () {
                    resolve()
                }, 2000);
            });
        })
        .then(function(){
            console.log("第二次then")
            return new Promise(function(resolve){
                setTimeout(function () {
                    resolve()
                }, 2000);
            });
        })
      .then(function(){
          console.log('执行结束')
      })

 捕获错误:

    var promise = new Promise(function (resolve, reject) {
        let a = 7
        if (a < 5) {
            resolve(a)
        } else {
            reject()
        }
    })
    promise.then(function (value) {
        console.log(value++)
        return value
    }).catch(function (error = '出错了') {
        console.log(error)
    })

案例1:Promise.all 方法 (作用:在指定的所有Promise实例完成后执行)

    let add1 = () => {
        console.log('执行1');
        return new Promise(function(resolve){
            setTimeout(function(){
                console.log("执行1完成")
                resolve()
            },2000)
        })
    }
    let add2 = () => {
        console.log('执行2');
        return new Promise(function(resolve){
            setTimeout(function(){
                console.log('执行2完成')
                resolve()
            },2000)
        })
    }
    Promise.all([
        add1(),
        add2()
    ]).then(() => {
        setTimeout(() => {
            console.log("执行结束")
        },2000)
    })

案例2:Promise.race 方法(作用:在指定的所有Promise实例中任何一个实例完成后执行)

    let add1 = () => {
        console.log('执行1');
        return new Promise(function(resolve){
            let timer = setTimeout(function(){
                console.log("执行1完成")
                resolve()
            },5000)
        })
    }
    let add2 = () => {
        console.log('执行2');
        return new Promise(function(resolve){
            let timer = setTimeout(function(){
                console.log('执行2完成')
                resolve()
            },2000)
        })
    }
    Promise.race([
        add1(),
        add2()
    ]).then(() => {
        setTimeout(() => {
            console.log("执行结束")
            add1 = null
            add2 = null
        },2000)
    })
posted on 2019-09-23 05:43  yu_bin  阅读(130)  评论(0编辑  收藏  举报