• ES6 Promise


    先说一下Promise的作用吧

    首先可以实现异步编程

    然后你有异步方法的时候,可以通过Promise的then方法来实现同步执行

    Promise的resolve()就是保存结果,作为参数传给then()

    reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。传给catch()

    最近在做小程序,

    小程序的request请求都是异步的,没有同步设置,然后就想着用Promise来同步代码,

    最简单的就是用这种Promise,然后再then

            // 获取用户地理位置
            var p1 = new Promise(function(resolve, reject) {
                util.getLocation(function(res) {
                    var point = {
                        latitude: res.latitude,
                        longitude: res.longitude
                    }
                    // app.globalData.point = point
                    that.setData({
                        point: point
                    })
                    resolve(that.data.point)
                })
            })
        p1.then(function() {
                util.wxAuthGet('/order/list', {
                    long:that.data.point.longitude,
                    lat: that.data.point.latitude,
                    type: that.data.type,
                    page: 1
                }, function(data) {
                    var index = that.data.type - 1;
                    // 当前标签的列表
                    that.data.orderList[index] = data;
    
                    // 创建ad=[{},{},{}]
                    var ad = [];
                    for (var i = data.length - 1; i >= 0; i--) {
                        ad.push({})
                    };
    
    
                    that.data.animationData[index] = ad;
                    // 渲染
                    that.setData({
                        orderList: that.data.orderList,
                        animationData: that.data.animationData,
                        dataId: that.data.type
                    });
                    // 隐藏toast
                    wx.hideToast();
                }, null, '', that);
    

     这段代码的意思是获取自己的位置成功后获取数据,因为在小程序里面获取自己的位置也需要时间,我需要先获取地理位置再执行下面的代码

     如果Promise里面有多个异步请求,for循环,可以用

    Promise.all(addrs.map((item, index) => makePromise(item, that))).then(res => {
                        console.log(that.data.allDis)
                            // console.log(allDis)
                        console.log('这是在哪里进行')
                        for (var i = 0; i < addrs.length; i++) {
                            var dis = {
                                tDis: res[i].takeDis,
                                sDis: res[i].sendDis
                            }
                            that.data.allDis[cur].push(dis)
                        }
                        that.setData({
                            allDis: that.data.allDis
                        })
                        console.log('hello', that.data.allDis[1])
                    })
    

      Promise.all语法糖

    还有一个很重要的语法,就是Promise里面的reject

    也就是用catch捕捉的错误信息

    // bad
    p
      .then(function(data) {
        // success
      }, function(err) {
        // error
      });
    
    // good
    p
      .then(function(data) { //cb
        // success
      })
      .catch(function(err) {
        // error
      });

    catch捕捉promise里的reject()里面的错误信息哦

    当p函数里面有错误信息时,catch也可以捕捉到错误

  • 相关阅读:
    奈良有鹿
    Luogu P1892 团伙
    Luogu P1330 封锁阳光大学
    java读取property文件
    collection
    testNG学习
    maven项目学习
    Android.mk详解二
    sdk开发经验
    工作经验
  • 原文地址:https://www.cnblogs.com/lwwen/p/6823991.html
Copyright © 2020-2023  润新知