1、js是‘單線程’語言,執行模式有兩種:同步,異步
單線程:只有一條流水線
同步:依次再流水線上執行
異步:流水線旁加了一個臨時儲物台(任務隊列),會把某些模塊拿到臨時儲物台,或者會把臨時儲物台的某些模塊插隊到流水線
2、js默認模式是同步模式,按流水線執行:A,B,C,不管A里邊代碼運行時間多長,都要先執行完A,再執行B,再執行C
A:sssssssssssssssssssssssssss
B: ddd
C: ccccccccc
3、實現異步模式的幾種方法
①回調函數(把臨時儲物台的模塊插入到流水線)
②setTimeout(把流水線的模塊拿到臨時儲物台,過一段時間再插入回去)
③Promise對象(把臨時儲物台的模塊插入到流水線)
4、小程序中所有的wx.xxx()接口,也都是異步模式(先執行流水線上非wx.xxx的模塊,把流水線上所有的wx.xxx模塊先拿到臨時儲物台執行,等哪個有了返回結果,並且流水線上有空了,也就是流水線上非wx.xxx的模塊執行完了,再把哪個插回去)
5、async函數中,代碼的執行模式是,異步模式,所有的模塊都放在臨時儲物台上執行,哪個模塊執行完了,就先把哪個模塊拿到流水線上執行
6、舉例
jobs.add({ data: { userName: 'aaa' } }) .then(res => { wx.hideLoading({ success: res=>{ console.log('hideLoading') } }) wx.showToast({ title: '提交成功', icon: 'success', duration: 2000 }) wx.switchTab({ url: '../my/my', }) console.log('aaaa') }) .catch(err => { console.log(err) })
執行順序:
把wx.hideLoading,wx.showToast,wx.switchTap先放到臨時儲物台,並執行
執行流水線上的console.log('aaaa'),流水線上有空了,把臨時儲物台上最先有了返回結果的wx.hideLoading插入回流水線執行,流水線上有空了,又把第二個有了返回結果的wx.switchTab插入回流水線執行
顯示順序:aaaa,hideLoading,跳轉
其他:
7、if...else if....else會按照順序執行,先執行if,再執行else if,再執行else
8、for循環是先執行完內部的循環,再跳出循環,for循環后面的代碼,必須for循環完成后才能執行