同步等待方法

jetz發表於2017-10-28
function waitVar(key,varb, fun) {      //等待指定變數,返回:-1:無資料,繼續等待 -2:超時 1:成功。fun不支援引數
  if (!cnt2[key]) {
    cnt2[key] = 1
  }
  else {
    cnt2[key]++
  }
  if (!varb || varb.length == 0) {
    if (cnt2[key] > 10) {      //超時,由於都是非同步操作,相互依賴的變數會同時判斷,所以這個時間是最大的
      wx.showToast({
        title: '無法獲取資料!',
        image: "/remind.png",
        duration: 3000
      })
      return -2
    }
    else {
      console.log("等待變數同步" + key, varb)
      wx.showToast({
        title: '正在下載資料!',
        image: "/remind.png",
        duration: 500
      })

      if (arguments.length == 3)  //正常狀態,fun沒有引數
        setTimeout(fun, 500)

      //對於onLoad無法使用,因為他的引數無法像普通引數一樣處理  
      if (arguments.length == 4)  //正常狀態,fun有1個引數,arguments不能按照陣列來處理,不能用slice,所以逐個處理
      {
        console.log("引數",arguments,arguments[3])
        setTimeout(fun, 500, arguments[3]) //arguments:0,1,2:3個引數。3:傳遞給fun的引數。setTimeout(回撥函式,時間,引數1,...,引數n)
      }

      return -1
    }
  }
  return 1
}

相關文章