小程序异步解决方案

核心提示最初看到小程序的网络请求的时候,尤其是演示示例中,userInfoReadyCallback这个函数更是一头雾水。其实并不怎么理解.一直很费解.网上各路大侠都有解释,但是就是,不知道是怎么个顺序,而我也是个对程序执行流程很关注的人,现在把我

第一次看到小程序的网络请求,尤其是演示例子中,userInfoReadyCallback这个函数更是一头雾水。其实我也不是很懂。总是让人摸不着头脑。网上的英雄都有解释,只是我不知道顺序是什么,而且我也是一个非常关注程序执行过程的人。现在,我想和你分享我的心。如有误解,望指教。下面这段代码是小程序快速创建项目的代码,里面有相关的解释。我将删除一些我们不使用的,并在这里集中讨论网络请求。

App {

//显示本地存储能力

var logs = wx.getStorageSync || []

logs.unshift)

wx.setStorageSync

//登录

wx .登录

//获取用户信息

wx.getSetting {

//授权,可以直接调用getUserInfo获取头像昵称,不用弹出框。

wx.getUserInfo {

this.userInfoReadyCallback

}

}

})

}

}

})

},

全局数据:{

userInfo: null

}

})

//index.js

//获取应用程序实例

const app = getApp

页

},

//事件处理函数

bindViewTap:函数{

wx .导航

},

onLoad:函数{

如果{

this.setData

}否则如果{

//由于getUserInfo是一个网络请求,可能会在Page.onLoad之后返回

//所以在这里添加回调来防止这种情况。

app . userinfoeadycallback = RES = > {

this.setData

}

}否则{

//没有open-type=getUserInfo版本的兼容处理时

wx.getUserInfo

}

})

}

},

getUserInfo: function {

console.log

app . global data . userinfo = e . detail . userinfo

this.setData

}

})

这里重点说一下index.js的这一段。

//由于getUserInfo是一个网络请求,可能会在Page.onLoad之后返回

//所以在这里添加回调来防止这种情况。

app . userinfoeadycallback = RES = > {

this.setData

}

这到底代表了什么?首先,这只是一个方法的定义。而且,这个方法定义了一个在全局app下注册的新方法。请注意,这里只注册了一个方法。arrow =>res相当于:app . userinfoeadycallback = function {-}

当时我很困惑:这个函数定义的res是从哪里来的?如果是来自服务器的数据,有多个网络请求怎么区分?怎么知道哪个对应哪个。后来反复思考,才知道其实只是一个定义,只是没有落实。执行在这里app.js你看到了吗?这里的网络请求是wx.getUserInfo是applet的api接口函数,属于异步请求。

wx.getUserInfo {

this.userInfoReadyCallback

}

}

})

}

所以这个请求发出后,其他的事情还是可以做的,包括后期index.js页面的加载等。当索引页面加载时,会出现两种情况,一种是网络请求已经成功。在这种情况下,如果在index的onload中直接执行第一个if分支,另一个就是不成功。然后,当加载索引页时,将定义这个全局函数。注意必须定义为app。函数名。定义了这个函数之后,在系统中就会找到这个函数定义。然后,当app的web请求有反馈结果时,就会执行这个函数,将会员的信息绑定到页面上。这将正确同步数据。

可以理解为,异步加载请求后,系统还有一个监控器,随时监控结果是否返回。而在索引页加载js就意味着定义了系统方法。一旦被定义,就意味着它是全局存在的,是即时更新的。当异步加载请求有反馈时,它会判断系统当前的函数定义和状态,一旦满足提交就立即执行。

关于同步和异步请求,我们有一个非常简单的例子来说明这个问题。

同步加载试验

返回结果:

// async:true

async:真,

Ajax经常被用来及时获取后端信息。默认情况下,它是异步的。如果添加async:true,它将是同步的。同步的概念是,只有在执行了这个之后,才能执行下面的。如上例所示,如果是同步,最终结果显示ajax同步测试返回结果是因为他先执行了上面那个。如果是异步的,那么Ajax请求将被执行,页面的其余部分将继续。后来成功的功能:这个被执行了,所以一定是显示了data中的数据。经过上面的实验,我们对上面微信小程序获取用户信息的处理有了很好的理解。

 
友情链接
鄂ICP备19019357号-22