微信小程序異步處理 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

微信小程序異步處理

發表時(shí)間:2022-9-6

發布人(rén):融晨科技

浏覽次數:50

直接看問題:


然後看打印的(de)結果:

根據上(shàng)面兩圖可以(yǐ)看出(chū),代碼上(shàng)先執行的(de)網絡請求,再執行打印的(de)變量,但是(shì)從下面打印的(de)結果來(lái)看,先出(chū)結果的(de)是(shì)執行打印變量的(de)函數(aafn函數),再打印出(chū)網絡請求success的(de)回調裏返回的(de)數據和(hé / huò)賦值後的(de)變量的(de)值;

爲(wéi / wèi)什麽先執行的(de)aafn,并且打印的(de)值沒有賦值上(shàng)?

因爲(wéi / wèi)wx.request是(shì)一個(gè)異步的(de)請求,所以(yǐ)數據請求的(de)同時(shí),可以(yǐ)繼續向下執行函數。所以(yǐ)這(zhè)裏值還沒有賦值上(shàng)就(jiù)開始打印了(le/liǎo)變量的(de)值;

這(zhè)種情況,怎麽解決呢?


方法一: 嵌套

在(zài)wx.request的(de)success回調裏執行aafn函數

然後運行結果

這(zhè)裏就(jiù)取到(dào)值了(le/liǎo)

但是(shì)如果邏輯很複雜,需要(yào / yāo)用到(dào)很多層異步,就(jiù)像這(zhè)樣:

asyncFn1(function(){
  //...
  asyncFn2(function(){
    //...
    asyncFn3(function(){
      //...
      asyncFn4(function(){
        //...
        asyncFn5(function(){
           //...
        });
      });
    });
  });
});

這(zhè)樣代碼看起來(lái)就(jiù)很不(bù)好看,代碼的(de)可讀性和(hé / huò)可維護性就(jiù)不(bù)好了(le/liǎo)

那怎麽解決這(zhè)個(gè)問題呢?Promise這(zhè)種概念的(de)産生,很好地(dì / de)解決了(le/liǎo)這(zhè)一切,Promise是(shì)什麽?這(zhè)裏我就(jiù)不(bù)多說(shuō)了(le/liǎo)有興趣的(de)自己去看一看, Promise介紹鏈接

先看看Promise的(de)方式:

function asyncFn1(){
  return new Promise(function (resolve, reject) {
    //...
  })
}

// asyncFn2,3,4,5也(yě)實現成跟asyncFn1一樣的(de)方式...
調用

asyncFn1()
  .then(asyncFn2)
  .then(asyncFn3)
  .then(asyncFn4)
  .then(asyncFn5);

這(zhè)樣的(de)話,異步函數就(jiù)可以(yǐ)依次執行了(le/liǎo)


微信小程序的(de)異步API怎麽支持Promise呢?

我們可以(yǐ)一個(gè)一個(gè)的(de)用Promise去包裝這(zhè)些API,但是(shì)這(zhè)個(gè)還是(shì)比較麻煩的(de)。不(bù)過,小程序的(de)API的(de)參數格式都比較統一,隻接受一個(gè)object參數,回調都是(shì)在(zài)這(zhè)個(gè)參數中設置,所以(yǐ),這(zhè)爲(wéi / wèi)了(le/liǎo)統一處理提供了(le/liǎo)便利,寫一個(gè)工具方法,來(lái)完成這(zhè)樣的(de)工作

首先需要(yào / yāo)引用一個(gè)叫bluebird.js的(de)文件;

進入 bluebird官網 下載:

這(zhè)個(gè)好像是(shì)不(bù)能下載的(de),但是(shì)你可以(yǐ)點擊進入,然後複制,在(zài)小程序裏創建一個(gè)js文件,将代碼複制到(dào)這(zhè)個(gè)js裏面,然後引用

然後再寫一個(gè)JS,裏面寫工具方法:

下面是(shì)prom.js

然後需要(yào / yāo)使用的(de)那個(gè)頁面的(de)js裏引入prom.js:

調用:

打印結果

這(zhè)樣就(jiù)可以(yǐ)了(le/liǎo),完結。


相關案例查看更多