回调函数第一次调用有延迟???
发布于 5 年前 作者 qiang08 6045 次浏览 来自 问答

bindTest 是按钮触发事件,我按两下打印的LOG如下(第1次按和第2次按,打印的顺序不一致???):

7 回复

官方的SAMPLE代码。

还是不清楚什么原因。

谢谢大牛!这种异步回调的接口,通常是类似fork一个子线程的方式去实现的吗? 还是JS中有什么方法可以实现定义回调函数为异步的?

我截图的那个  app.getUserInfo 里的例子应该确切的说是受 wx.getUserInfo 的回调 success 影响时可能会是异步的,而直接返回缓存中结果的是同步的方式,能这样理解的吧?

首先,是否异步,取决于函数的具体实现方式,比如 wx.login 和 wx.getUserInfo 就是异步的,而你的 app.getUserInfo 有时表现为异步、有时表现为同步。

其次,回调函数典型的应用场景就是用于接收异步操作的结果,但也不总是这样,比如 Array.forEach() 这个函数也是以一个回调函数为入口参数,但它是同步执行的。

js 是单线程模型,所有的 js 代码都是在同一个线程里执行的,所以不用考虑线程间冲突之类的麻烦事儿。一般来说,都是因为涉及 IO 操作才会用到异步模式,如果你自己一定要用代码实现一个异步回调的效果的话,可以用 setTimeout()。

第二个问题,理解正确。

是js里这种调用wx.login的函数,里面的sucess或fail这类回调都是异步的,还是说只是微信小程序里实现这些回调都是异步的? 我是JS萌新,求教。

简单一点问就是:

问题1: 回调过程是异步的,能这样理解吗?

问题2:微信小程序的回调是异步的? 还是js的回调是异步的? 还是仅限于部分微信小程序接口里的回调是异步的?

我在官方API介绍里没有找到关于wx.login是异步的说明。

这个函数内部是做了缓存的,第一次调用的时候,会去调用 wx.login/wx.getUserInfo 以获取数据,这是个异步过程,函数先返回,然后在将来的某个时间会在 success 里面调用传入的回调函数。第二次调用的时候,因为有了缓存,直接调用传入的回调函数,然后再返回。

还是读一下你自己写的 app.getUserInfo 代码吧,应该就清楚了。

回到顶部