微信小程序的同步操作

小程序里,大多数操作都是异步操作,一些重要的操作,如从网上获取重要变量值,必须要保证有值,后续操作才有意义。但异步操作,又必须把处理放到回调中,代码可读性降低,而且和大多数正常逻辑相背。

折腾了两天,试了一些方法,记录一下:

1、最简单,用while循环等待,发现基本上卡死

2、灵机一动,用showToast自带的超时功能,循环等待,也不行。因为showtoast是异步执行的。其他的showModel都是异步执行的,显示了弹窗后,代码仍然会向后执行的。

3、网上找到,用Promise,太复杂,不想这么做

最后,用这个方式初步解决,在用数据前,判断变量是否存在,如果没有,则显示提示,退出,并在一定时间后重新进入本函数(onShow):

    console.log("xunhuan", app.tags)
    if (app.tags.length == 0) {
      wx.showToast({
        title: '正在下载数据!',
        image: "/remind.png",
        duration: 500
      })
      console.log("jieshu", app.tags)
      setTimeout(this.onShow, 500)
      return
    }
    console.log("after", app.tags)

 

但在每个地方都放这么多代码,太难看。想着在app.js里面,onShow的地方加一个,结果还是不行。因为即使在这里循环检查,但由于异步执行,代码仍然会正常执行到具体页面。看来,还得把检测代码放到具体处理中。

posted @ 2017-10-25 15:01  jetz  阅读(4254)  评论(0编辑  收藏  举报