微信小程序所有请求都是异步加载

今天关于函数执行顺序出了点问题,

一直想不通,后来一看,小程序的所有请求都是异步的请求。给自己留个心眼,免得以后又出问题


Page({


  data: {
    books: '',
    teamId:[1],
    banbenIdarray:[],
    zhangjieIdarray:[],
    unit: "",
    gradeId:"",
    banbenId:"",
    zhangjieId:"",
    meng:0,
    money: "",
    multiArray: [['七年级', '八年级', '九年级'], ['人教版', '苏教版',], ['上下册', '上册', "下册"]],
    objectMultiArray: [
      [
        {
          id: 0,
          name: '七年级'
        },
        {
          id: 1,
          name: '八年级'
        }
      ], [
        {
          id: 2,
          name: '九年级'
        },
        {
          id: 0,
          name: '人教版'
        },
        {
          id: 1,
          name: '苏教版'
        },
        {
          id: 0,
          name: '上下册'
        },
        {
          id: 1,
          name: '上册'
        }
      ], [
        {
          id: 2,
          name: '下册'
        },

      ]
    ],
    multiIndex: [0, 0, 0],

    array: ["全部", '第一单元', '第二单元', '第三单元', '第四单元', '第五单元', '第六单元', '第七单元', '第八单元'],
    parent: '',
    arrayone: [{id:1,value:'a',name:'A' },{id:2,value:'b',name:'B' }],
    arraybanben: [{id:1,value:'a',name:'A' },{id:2,value:'b',name:'B' }],
    arrayzhangjie: [{id:1,value:'a',name:'A' },{id:2,value:'b',name:'B' }],
    index:0,
    index2:0,
    index3:0,
    id:"",
    school: ''

  },


   onLoad: function (options) {
    var that = this;
    // var teamId=[];
    var banbenIdarray=[];

    //  wx.request({
      
    //    url:getApp().globalData.website + "classi/", 
    //    // url: "http://192.168.1.110:8000/news/listNews/", 
    //   method: "get",
    //   //向后台传递的值
    //   data: {
    //     //qqq: this.data.allchecked
    //    // openId: wx.getStorageSync('openId')
    //     //后台接到qqq:true
    //    }, 
    //    //基本的键值对表单表单传递编码格式,转换成字符串进行传递
    //  header: {
    //      'content-type': 'application/x-www-form-urlencoded'
    //    },
    //    //成功回调函数
    //   success: function (res) {
    //     for (var i = 0; i <res.data.lis.length; i++) {
    //         teamId.push(res.data.lis[i].id);    
    //     }
    //      that.setData({
    //       teamId: teamId,
    //        });

    //     if (res.data.code == 0) {
    //       //调用listData函数来设置数据
    //       that.listData(res);
    //       that.shuaZhangjie();
    //     }
    //   },
    //   //失败回调函数
    //   fail: function (res) {
    //     console.log('刷list数据失败');
    //   }
    // });

      wx.request({
      
       url:getApp().globalData.website + "fication/", 
       // url: "http://192.168.1.110:8000/news/listNews/", 
      method: "get",
      //向后台传递的值
      data: {
        //qqq: this.data.allchecked
       // openId: wx.getStorageSync('openId')
        //后台接到qqq:true
       }, 
       //基本的键值对表单表单传递编码格式,转换成字符串进行传递
     header: {
         'content-type': 'application/x-www-form-urlencoded'
       },
       //成功回调函数
      success: function (res) {
      
         for (var i = 0; i <res.data.lis.length; i++) {
            banbenIdarray.push(res.data.lis[i].id);    
        }
         that.setData({
          banbenIdarray: banbenIdarray,
           });

        if (res.data.code == 0) {
          //调用listData函数来设置数据
          that.listData2(res);
          that.shuanianji();
          that.shuaZhangjie();
        }
      },
      //失败回调函数
      fail: function (res) {
        console.log('刷list数据失败');
      }
    });
  },


       /*刷新数据,把后台传递的值进行设置*/
  listData: function (res) {
  var that=this;
    
     
     
       
        that.setData({
          arrayone: res.data.lis,
           });
        

 
  },

         /*刷新数据,把后台传递的值进行设置*/
  listData2: function (res) {
    if(res.data.code==0){
      
        this.setData({
          arraybanben: res.data.lis,
           });

    }else{
    this.setData({
      arraybanben: res.data.lis,//不用假数据,后台传值的改为时候res.data.list,记得商量要和后台说data和list
    });
  }
  },
           /*刷新数据,把后台传递的值进行设置*/
  listData3: function (res) {
      var quanbu={
          id: 9999,
          chapter: '全部'
        };
    var nianji=[];
    if(res.data.code==0){
  
      nianji=res.data.lis;
      nianji.unshift(quanbu);
   
        this.setData({
          arrayzhangjie: nianji,
           });

    }else{
    this.setData({
      arrayzhangjie: res.data.lis,//不用假数据,后台传值的改为时候res.data.list,记得商量要和后台说data和list
    });
  }
  },




shuanianji: function () {
    var that=this;
    var teamId=[];
    var zhangjieIdarray=[];
   var banbenindex=that.data.index2;
   console.log("that.data.index")
   console.log(that.data.index)
    // console.log(that.data.teamId[gradeindex]);
     wx.request({
                 url:getApp().globalData.website + "classi/", 
                 method:"get",
                  data: {
                      version_id:that.data.banbenIdarray[banbenindex]

                  }, 
                  header: {'content-type': 'application/x-www-form-urlencoded'},  
                 success:function(res) {
                                   
                                    for (var i = 0; i <res.data.lis.length; i++) {
                                       teamId.push(res.data.lis[i].id);    
                                                                 }
                                       that.setData({
                                        teamId: teamId,
                                         });
                                       console.log("teamId");
                                       console.log(teamId);
                                       
                                      that.shuaZhangjie();
                                   if (res.data.code == 0){
                                        that.listData(res);
                                   }else{
                                     that.listData(res);
                                    }
                   },
              
                 fail:function(res){

                  }
               });
  },

           /*刷新数据,把后台传递的值进行设置*/
  shuaZhangjie: function () {
    var that=this;
    var zhangjieIdarray=[];
   var gradeindex=that.data.index;
   var banbenindex=that.data.index2;

    // console.log(that.data.teamId[gradeindex]);
     wx.request({
                 url:getApp().globalData.website+"chapterlist/", 
                 method:"get",
                  data: {
                      version_id:that.data.banbenIdarray[banbenindex],
                      grade_id:that.data.teamId[gradeindex]

                  }, 
                  header: {'content-type': 'application/x-www-form-urlencoded'},  
                 success:function(res) {
                                   
                                   that.setData({
                                        index3:0,
                                         });
                                 
                                   if (res.data.code == 0){
                                       for (var i = 0; i <res.data.lis.length; i++) {
                                                zhangjieIdarray.push(res.data.lis[i].id);    
                                      }
                                   that.setData({
                                        zhangjieIdarray: zhangjieIdarray,
                                   });
                                        that.listData3(res);
                          
                                   }else{
                                      that.listData3(res);
                                    }
                   },
              
                 fail:function(res){

                  }
               });
  },

  //去服务协议

  toAgreement: function (e) {
    wx.navigateTo({
      url: "../agreement/agreement"
    })
  },


  //选择课本
  bindMultiPickerChange: function (e) {
    console.log(e.detail.value)

    this.setData({
      multiIndex: e.detail.value
    })

  },
  bindMultiPickerColumnChange: function (e) {
    // console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
    var data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch (e.detail.column) {
      case 0: //第一列
        switch (data.multiIndex[0]) {
          case 0://七年级
            data.multiArray[1] = ['人教版', '苏教版',];
            data.multiArray[2] = ['上下册', '上册', "下册"];
            break;
          case 1://八年级
            data.multiArray[1] = ['人教版', '苏教版',];
            data.multiArray[2] = ['上下册', '上册', "下册"];
            break;
          case 2://九年级
            data.multiArray[1] = ['人教版', '苏教版',];
            data.multiArray[2] = ['上下册', '上册', "下册"];
            break;
        }
        data.multiIndex[1] = 0;
        data.multiIndex[2] = 0;
        break;
      case 1: //第二列
        switch (data.multiIndex[0]) {
          case 0://人教版
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['上下册', '上册', "下册"];
                break;
              case 1:
                data.multiArray[2] = ['上下册', '上册', "下册"];
                break;

            }
            break;
          case 1: //苏教版
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['上下册', '上册', "下册"];
                break;
              case 1:
                data.multiArray[2] = ['上下册', '上册', "下册"];
                break;

            }
            break;
        }
        data.multiIndex[2] = 0;
        //console.log(data.multiIndex);
        break;
    }
    this.setData(data);
    //console.log(data.multiIndex);
  },


  //选择单元
  bindPickerChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      index: e.detail.value
    })
  },


  /**
   * 保存年级
   */

   bindNianji: function(e){
    var that=this;
     var gradeId=e.currentTarget.dataset.id;
    var  name=e.currentTarget.dataset.name;
    // console.log("直接获取到的id")
    // console.log(e.currentTarget.dataset.id);
     // e.detail.value.theid = that.data.teamId[e.detail.value.theid];
    
    that.setData({
      index: e.detail.value,
      gradeId: gradeId
    })
    that.setData({
      meng:that.data.index
    })
    // var mengindex=that.data.index;
    // console.log("打印的index")
    // console.log(that.data.meng);
    // console.log("用数组打印的id")
    // console.log(that.data.teamId[mengindex]);
    that.setData({
       index3:0,
       });
    that.shuaZhangjie();
    
  },

  bindBanben: function(e){
    var that=this;
    var index2=that.data.index2;
     var banbenId=e.currentTarget.dataset.id;
     // console.log("打印版本id")
    this.setData({
      index2: e.detail.value,
      banbenId: banbenId
    })
      that.setData({
      meng:that.data.index2
    })
     that.setData({
       index:0,
       });
     that.setData({
       index3:0,
       });
    console.log("你说打");
    console.log("打印的index2")
    console.log(that.data.index2);
    console.log("版本用数组打印的id")
    console.log(that.data.banbenIdarray[that.data.meng]);
    
    that.shuanianji();
    
  },

   bindzhangjie: function(e){
    var that=this;
     var zhangjieId=e.currentTarget.dataset.id;
    this.setData({
      index3: e.detail.value,
      zhangjieId: zhangjieId
    })
    console.log("000000000000000000")
    console.log(that.data.index3)

    

  },
	/*
		获取课本
	*/
  books: function (e) {
    this.setData({
      books: e.detail.value
    })

  },


  /*
		获取单元
	*/
  unit: function (e) {
    this.setData({
      unit: e.detail.value
    })

  },





  //选好了的按钮
  selOk: function () {

    var that = this;
    var chapterindex=that.data.index3-1;
    console.log(that.data.index3);
    console.log(that.data.zhangjieIdarray);
    console.log(that.data.zhangjieIdarray[chapterindex]);
    if(that.data.index3==0){
                     var gradeindex=that.data.index;
                     var banbenindex=that.data.index2;
                     wx.request({

                    url:getApp().globalData.website + "grade_price/", 
                    method: "get",

                    data: {
                      version_id:that.data.teamId[banbenindex],
                      grade_id:that.data.teamId[gradeindex]
                    },

                    header: {
                      'content-type': 'application/json'
                    },
                    //成功回调函数
                    success: function (res) {

                      if (res.data.code == 0) {
                        //调用theMoney函数来设置钱数成
                          that.setData({
                            money: res.money,
                           });  
                         that.theMoney(res);
                      }
                    },

                    fail: function (res) {

                    }
                  });

    }else{
                    wx.request({

                      url:getApp().globalData.website + "chapter_price/", 
                      method: "get",

                      data: {
                        chapter_id:that.data.zhangjieIdarray[chapterindex]
                      },

                      header: {
                        'content-type': 'application/json'
                      },
                      //成功回调函数
                      success: function (res) {

                        if (res.data.code == 0) {
                          //调用theMoney函数来设置钱数成
                            that.setData({
                              money: res.money,
                             });  
                           that.theMoney(res);
                        }
                      },

                      fail: function (res) {

                      }
                    });
  }

  },

  //钱数
  theMoney: function (res) {
    this.setData({
      money: res.data.money,
    });
  },









  //发起微信支付
  pay: function (e) {
    var money = this.date.money;
    if (money.length == 0) {
      wx.showModal({
        title: '提示',
        content: '请您确定是否选择完毕',
        success: function (res) {
          if (res.confirm) {
            console.log('用户点击确定')
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    } else {
      wx.login({    //先登录
        success: function (res) {
          console.log(res.code),
            wx.request({

              url: '', //支付地址
              data: {
                code: res.code
              },
              header: {
                'content-type': 'application/json'
              },
              success: function (res) {
                var date = res.data;
                wx.requestPayment({
                  'timeStamp': '',
                  'nonceStr': '',
                  'package': '',
                  'signType': 'MD5',
                  'paySign': '',
                  'success': function (res) {
                    console.log("支付成功");
                  },
                  'fail': function (res) {
                    console.log("支付失败");
                  }
                })
              }


            })
        }
      });
    }
  },





    //
  payoff: function(e){
    var that = this;
    var openId=wx.getStorageSync('openId');
    wx.login({
      success: function(res) {
        that.xiadan(res.code);
      }
    });
    
  },
  //获取openid
  getOpenId: function(code){
    var that = this;
    wx.request({ 
        url:getApp().globalData.website + "openid/", 
         method: "get",
        header: {
           'content-type': 'application/x-www-form-urlencoded'
        },
        data: {'code':code},
        success: function(res) {
           var openId = res.data.openid;
           that.xiadan(openId);
        }
    })
  },
  //下单
  xiadan: function(code){
    var that = this;
    wx.request({
        url:getApp().globalData.website + "wxpay/", 
        method: 'POST',
        header: {
           'content-type': 'application/x-www-form-urlencoded'
        },
        data: {'code':code,
                'money':that.data.money

      },
        success: function(res) {
           if (code == 0) {
            var prepay_id = res.data.wxpay_params;
           console.log("统一下单返回 prepay_id:"+prepay_id);
           that.sign(prepay_id);
  
        } else {
              console.log("返回code为1-----------------------------")
        }
           
        }
    })
  },
  //签名
  sign: function(prepay_id){
    var that = this;
    wx.request({
        url:getApp().globalData.website + "wxpayNotify/",  
        method: 'POST',
        header: {
           'content-type': 'application/x-www-form-urlencoded'
        },
        data: {'repay_id':prepay_id},
        success: function(res) {
           that.requestPayment(res.data);

        }
    })
  },
  //申请支付
  requestPayment: function(obj){
    wx.requestPayment({
      'timeStamp': obj.timeStamp,
      'nonceStr': obj.nonceStr,
      'package': obj.package,
      'signType': obj.signType,
      'paySign': obj.paySign,
      'success':function(res){
      },
      'fail':function(res){
      }
    })
  } 



})

问题出在这儿,想要先刷版本,通过版本id刷年级,再通过年级id和版本id刷章节。

  bindBanben: function(e){
    var that=this;
    var index2=that.data.index2;
     var banbenId=e.currentTarget.dataset.id;
     // console.log("打印版本id")
    this.setData({
      index2: e.detail.value,
      banbenId: banbenId
    })
      that.setData({
      meng:that.data.index2
    })
     that.setData({
       index:0,
       });
     that.setData({
       index3:0,
       });
    console.log("你说打");
    console.log("打印的index2")
    console.log(that.data.index2);
    console.log("版本用数组打印的id")
    console.log(that.data.banbenIdarray[that.data.meng]);
    
    that.shuanianji();
    that.shuazhangjie();
    
  },

 最后两句:
    that.shuanianji();
    that.shuazhangjie();

在版本改变后想要先刷年级,继而章节跟着变。但发现id老是不对,返回的是上一个刷出来的数组值。如果按照顺序执行的话应该是这样。

后来才想起,小程序的所有请求都是异步的。在还没请求并改变数组的时候,下一条语句就已经执行了。

所以导致了以上的错误,害得纠结了半小时。

给自己提个醒,免得以后再犯错。

猜你喜欢

转载自blog.csdn.net/Xieyp040/article/details/82230340
今日推荐