1、同步与异步
在小程序中网络请求wx.request不像其他框架可以设置同步或异步,wx.request在小程序中只能是异步方式。
既然是异步方式,就不能用以下的方式获取网络数据:
let data = wx.request({
url:'',
header:{
appket:""
}
})
而应该使用回调函数来获取请求后的数据。
wx.request({
url:'',
header:{
appket:""
},
success:function(res){
console.log(res)
}
})
2、箭头函数
如果回调函数使用传统写法,即上述写法,在使用data里的数据是,this.data中的this指的并不是Page对象,所以这样无法获取data数据。通常做法是在回调函数外部用that来存储this:
let that = this;
wx.request({
url:'',
header:{
appket:""
},
success:function(res){
console.log(that.data.test)
}
})
而使用箭头函数,则可以不需要that来存储this,直接使用this就行:
wx.request({
url:'',
header:{
appket:""
},
success:(res) => {
console.log(this.data.test)
}
})
3、回调函数的嵌套
如果在一个函数里要调用一个异步函数,则一定要把一个回调函数作为该函数的参数。
比如一个函数getLatest()要根据index从服务器获取相应的latest对象,则应该把获取数据的操作放在回调里,然后把这个回调作为getLatest()的一个参数。
getLatest()函数定义:
getLatest(sCallback) {
this.request({
url: 'classic/latest',
success: (data) => {
// 如果不用箭头函数,this将指代不正确
let key = this._fullKey(data.index)
wx.setStorageSync(key, data)
this._setLatestIndex(data.index)
sCallback(data)
}
})
}
其中request函数也是异步函数,因此sCallback要放在request函数的回调中。
request函数定义如下:
request(params) {
var that = this
var url = this.baseRestUrl + params.url;
if (!params.method) {
params.method = 'GET';
}
wx.request({
url: url,
data: params.data,
method: params.method,
header: {
'content-type':