setTimeout解決同步函數(shù)執(zhí)行問題

今天項目有個需求擎场,新增活動列表和活動詳情頁面的分享迅办,且這兩個分享入口進(jìn)入小程序只顯示活動相關(guān)頁面站欺,無法看到小程序的其他頁面,所以我選定用redirectTo去做導(dǎo)航镊绪。

提前說明:
pages/index/index:小程序統(tǒng)一入口頁面
pages/activityList/activityList:活動列表頁面
pages/activityResumeDetail/activityResumeDetail:活動報名人的簡歷詳情頁面

因為我們小程序分享入口很多蝴韭,我在index.js寫了一個start方法統(tǒng)一處理各種分享入口和正常進(jìn)入小程序的邏輯。

/**
 * 根據(jù)jump值處理分享和非分享入口進(jìn)入小程序
 * 一履磨、非分享:默認(rèn)是進(jìn)簡歷列表
 * 二庆尘、分享渠道進(jìn)入
 * 1:簡歷列表 2:榜單 3:我的頁面 4:簡歷詳情 5:職位詳情 
 * 6:首頁簡歷篩選條件頁面 7:職位列表 8:邀請好友瓜分紅包頁面 
 * 其中,3:因為我的頁面需要授權(quán)和綁定手機(jī)矛辕,從3進(jìn)入的子頁面發(fā)分享進(jìn)入小程序只到我的頁面
 **/
start: function () {
  var that = this
  if (this.data.jump == "2") {
    wx.switchTab({
      url: '/pages/rank/rank'
    })
  } else if (this.data.jump == "3") {
    wx.switchTab({
      url: '/pages/me/me'
    })
    } else if (this.data.jump == "7") {
    wx.switchTab({
      url: '/pages/position/position'
    })
  } else if (this.data.jump == "4" || this.data.jump == "5" || this.data.jump == "6" || this.data.jump == "8") {
    var tabUrl, pageUrl, lastPageUrl
    if (this.data.jump == "5") {
      tabUrl = "/pages/position/position"
      pageUrl = '/pages/jobDetail/jobDetail?jobId=' + this.data.jobId
    }else {
      tabUrl = "/pages/video/video"
      if (this.data.jump == "4") {
        pageUrl = '/pages/detail/detail?resumeId=' + this.data.resumeId
      } else if (this.data.jump == "6") {
        pageUrl = '/pages/filter/filter'
      } else {
        pageUrl = '/pages/shareRed/shareRed?jobId=' + this.data.jobId
      }
    }
    wx.switchTab({
      url: tabUrl,
      success: function () {
        setTimeout(function () {
          wx.navigateTo({
            url: pageUrl
          })
        }, 300)
      },
      fail: function () {
        wx.navigateTo({
          url: pageUrl
        })
      }
    })
  } else {
    wx.switchTab({
      url: '/pages/video/video'
    })
  }
}

這次主要的邏輯是處理jump=9 和 jump=10的跳轉(zhuǎn)聊品,一開始我是寫的這樣的:

if (this.data.jump == "9") {
  pageUrl = '/pages/activityList/activityList?activityId=' + that.data.activityId
  wx.redirectTo({
    url: pageUrl
  })
}else if (this.data.jump == "10") {
  pageUrl = '/pages/activityList/activityList?activityId=' + that.data.activityId
  lastPageUrl = '/pages/activityResumeDetail/activityResumeDetail?activityId=' + 
  that.data.activityId + '&resumeId=' + that.data.resumeId
  wx.redirectTo({
    url: pageUrl,
    success: function () {
      wx.navigateTo({
        url: lastPageUrl
      })
    },
    fail: function () {
      wx.navigateTo({
        url: lastPageUrl
      })
    }
  })
}

結(jié)果jump=10的情況沒有出現(xiàn)預(yù)期結(jié)果翻屈,添加log打印伸眶。發(fā)現(xiàn)執(zhí)行完redirectTo成功后刽宪,確實是會繼續(xù)執(zhí)行navigateTo,而且也成功了涂臣。但頁面仍舊停留在activityList售担,而非最終目標(biāo)頁面activityResumeDetail署辉,然后然后我就納悶了。

于是我嘗試改為先switchTab到tab頁面哥攘,再navigateTo到目標(biāo)頁面,結(jié)果仍然無效逝淹,此時分享入口進(jìn)來是還是停留在tab頁面不是lastPageUrl頁面栅葡。

wx.switchTab({
  url: pageUrl,
  success: function () {
    wx.navigateTo({
      url: lastPageUrl
    })
  },
  fail: function () {
    wx.navigateTo({
      url: lastPageUrl
    })
  }
})

查看其他jump入口進(jìn)入,且有中間頁面跳轉(zhuǎn)到目標(biāo)頁面到情況规脸,我發(fā)現(xiàn)我在第一次路由成功后增加了setTimeout來延遲熊咽,原來小程序提供到這些導(dǎo)航方法是同步的,捂臉~

原來我之前在start方法里寫的setTimeout方法是為解決導(dǎo)航時同步執(zhí)行引發(fā)的問題横殴,即二次導(dǎo)航進(jìn)入最終頁面時來不及等到第一次導(dǎo)航成功回調(diào)再執(zhí)行,而導(dǎo)致斷點測試時方法執(zhí)行氏身,頁面沒跳到最終頁面惑畴。

增加延遲后代碼如下,運(yùn)行如預(yù)期陷虎,撒歡~

else if (this.data.jump == "10") {
  pageUrl = '/pages/activityList/activityList?activityId=' + that.data.activityId
  lastPageUrl = '/pages/activityResumeDetail/activityResumeDetail?activityId=' + 
  that.data.activityId + '&resumeId=' + that.data.resumeId
  wx.redirectTo({
    url: pageUrl,
    success: function () {
      setTimeout({
        wx.navigateTo({
          url: lastPageUrl
        })
      }, 300)
    },
    fail: function () {
      wx.navigateTo({
        url: lastPageUrl
      })
    }
  })
}

PS:因為index頁面是很早寫的尚猿,那時候處理這個問題時沒做記錄楣富,也沒注釋為什么使用setTimeout,所以才導(dǎo)致今天再次踩坑懵逼了庄萎,所以好記性不如爛筆頭糠涛,現(xiàn)在記錄防止自己再次掉坑

再次強(qiáng)調(diào):
1、注釋&筆記重要性
2忍捡、排查問題需找準(zhǔn)方向

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砸脊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子栽连,更是在濱河造成了極大的恐慌侨舆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異臭笆,居然都是意外死亡愁铺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門茂洒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來督勺,“玉大人,你說我怎么就攤上這事智哀∮校” “怎么了送巡?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長授艰。 經(jīng)常有香客問我淮腾,道長糟需,這世上最難降的妖魔是什么洲押? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任杈帐,我火速辦了婚禮专钉,結(jié)果婚禮上跃须,老公的妹妹穿的比我還像新娘。我一直安慰自己尽楔,他們只是感情好第练,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布呕寝。 她就那樣靜靜地躺著婴梧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怔球。 梳的紋絲不亂的頭發(fā)上浮还,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天担汤,我揣著相機(jī)與錄音,去河邊找鬼洼冻。 笑死崭歧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撞牢。 我是一名探鬼主播率碾,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叔营,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了所宰?” 一聲冷哼從身側(cè)響起绒尊,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仔粥,沒想到半個月后婴谱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躯泰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年谭羔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麦向。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡景描,死狀恐怖超棺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氧苍,我是刑警寧澤让虐,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布惭缰,位于F島的核電站,受9級特大地震影響昂羡,放射性物質(zhì)發(fā)生泄漏到千。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埠对,春花似錦、人聲如沸襟沮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至徒扶,卻和暖如春姜骡,著一層夾襖步出監(jiān)牢的瞬間惫周,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親察藐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353