今天关于函数执行顺序出了点问题,
一直想不通,后来一看,小程序的所有请求都是异步的请求。给自己留个心眼,免得以后又出问题
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老是不对,返回的是上一个刷出来的数组值。如果按照顺序执行的话应该是这样。
后来才想起,小程序的所有请求都是异步的。在还没请求并改变数组的时候,下一条语句就已经执行了。
所以导致了以上的错误,害得纠结了半小时。
给自己提个醒,免得以后再犯错。