promise

Posted rickyctbur

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了promise相关的知识,希望对你有一定的参考价值。

概念: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)
    )

以上是关于promise的主要内容,如果未能解决你的问题,请参考以下文章

# Promise的简单理解和基本使用

# Promise的简单理解和基本使用

Promise笔记

异步总结

手写题整理

浅析promise