zoukankan      html  css  js  c++  java
  • 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)
        })
  • 相关阅读:
    二叉树的建树,按层遍历,结点总数,页结点,深度以及三序非递归遍历二叉树,建立中序线索二叉树
    志愿者选拔(单调队列)
    重建二叉树(中后序求前序)
    New Year Table(几何)
    Hopscotch(细节)
    红黑树(中序二叉树)
    Linux-awk命令详解
    Python--常用模块
    Python--re模块
    Python--模块与包
  • 原文地址:https://www.cnblogs.com/rickyctbur/p/11570257.html
Copyright © 2011-2022 走看看