收藏
回答

回调函数第一次调用有延迟???

问题模块
开发者工具

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






最后一次编辑于  2017-07-12
回答关注问题邀请回答
收藏

7 个回答

  • maq
    maq
    2017-07-12

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


    第二个问题,理解正确。

    2017-07-12
    赞同
    回复
  • 阿忠
    阿忠
    2017-07-12

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


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

    2017-07-12
    赞同
    回复
  • maq
    maq
    2017-07-12

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


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

    2017-07-12
    赞同
    回复
  • 阿忠
    阿忠
    2017-07-12

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


    简单一点问就是:

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

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


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

    2017-07-12
    赞同
    回复
  • maq
    maq
    2017-07-12

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

    2017-07-12
    赞同
    回复
  • 阿忠
    阿忠
    2017-07-12


    官方的SAMPLE代码。


    还是不清楚什么原因。

    2017-07-12
    赞同
    回复
  • maq
    maq
    2017-07-12

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

    2017-07-12
    赞同
    回复