最近在学微信小程序开发的时候,学到页面下拉刷新时,需要在刷新完成并且后台数据返回成功的情况下,执行如下函数:
complete: ()=>{
wx.stopPullDownRefresh();
}
这个函数的执行先决条件为:wx.request()的success()执行完之后执行。
所以一开始如果就像上面这样,直接把complete()函数放在wx.request()中,就会导致在页面加载执行onLoad()函数时也执行了wx.stopPullDownRefresh(),而我们的需求是:在用户有下拉刷新的动作完成,后台获取数据成功并返回的情况下再去执行wx.stopPullDownRefresh()。为了满足这一需求,教学视频采取的方法是:
getNow(callback) {
complete: () => {
callback && callback()
}
},
onPullDownRefresh() {
this.getNow(()=>{
wx.stopPullDownRefresh()
})
}
其中getNow()中包含wx.request(),一开始看到这个涉及到JS回调函数机制的模块并不是很理解,于是上网搜索后,对于其理解如下:
在onPullDownRefresh()定义的this.getNow()里的参数”()=>{wx.stopPullDownRefresh() }”就是一个匿名的回调函数,而“getNow(callback)”中的callback则是”()=>{wx.stopPullDownRefresh() }”的形参或者说是它的指针(地址)。
callback && callback()的理解:
callback && callback()相当于:
if(callback) {
callback(); //若callback为空,则不执行callback();
}
较为严谨的格式是:(callback && typeof(callback)===”function”) && callback();
保证回调函数存在并且必须是函数引用或者函数表达式。
说明:
函数只有在函数名后加上()才代表它要解释执行,所以这里的callback指代的是回调函数的定义,而callback()才是对回调函数的调用执行。