91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Proxy封裝小程序中異步調用的示例分析

發布時間:2021-04-01 10:39:35 來源:億速云 閱讀:171 作者:小新 欄目:移動開發

這篇文章主要介紹Proxy封裝小程序中異步調用的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

示例:

function wxPromisify(fn) {
    return async function(args) {
        return new Promise((resolve, reject) => {
            fn({
                ...(args || {}),
                success: res => resolve(res),
                fail: err => reject(err)
            });
        });
    };
}

export function toAsync(names) {
    return (names || [])
        .map(name => (
            {
                name,
                member: wx[name]
            }
        ))
        .filter(t => typeof t.member === "function")
        .reduce((r, t) => {
            r[t.name] = wxPromisify(wx[t.name]);
            return r;
        }, {});
}
// pages/somepage/somepage.jsimport { toAsync } = require("../../utils/async");
// ...const awx = toAsync(["login", "request"]);await awx.login();await awx.request({...});

這不已經封裝過了嗎?

這回寫的是不一樣的封裝。因為,一個小程序里要寫好多個 toAsync 調用,真的很煩吶!


能不能一次封裝,到處調用?能!把所有用到的方法都在初始化的時候封裝起來。可是,難免會有遺漏。

能不能一次封裝,到處調用,還不需要初始化?

能!祭出 Proxy 大神:

// utils/asyncjsfunction wxPromisify(fn) { ... }   
 // 前面已經定義過了export function asyncProxy(target) {    
 return new Proxy(target, {       
      cache: {},      
      get(it, prop) {       
          const aFn = this.cache[prop];   
          if (aFn) { return aFn; }  
          const v = it[prop];      
                if (typeof v !== "function") {          
                      return v;
            }            
            return this.cache[prop] = wxPromisify(v);
        }
    });
}
// app.jsimport { asyncProxy } from "./utils/async";

App({    onLaunch: function() {
        wx.awx = asyncProxy(wx);        // ....
    }
})
// pages/somepage/somepage// ...const { awx } = wx;await awx.login();await awx.request({...});

解釋:

因為 awx 是代理的 wx 對象,調用 awx.login() 的時候,實際是先調用代理的 get(wx, "login"),找到用來代替 wx.login 的東西。

根據上面代碼里的邏輯,先從 cache 里找使用 wxPromisify() 封裝的結果,若有,直接返回;若沒有,先封裝成 Promise 網絡的函數,存入 cache,再返回。

直觀一點描述,大概是這樣:

awx.login();
   ^^^^^^   get(wx, "login")

以上是“Proxy封裝小程序中異步調用的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐东| 永城市| 友谊县| 屏边| 凌云县| 林周县| 镇雄县| 宁阳县| 兴和县| 和平区| 莱阳市| 油尖旺区| 日喀则市| 青浦区| 甘孜| 汤阴县| 阜南县| 师宗县| 荣成市| 灵寿县| 广元市| 新乐市| 张家界市| 九龙坡区| 德庆县| 灵川县| 庐江县| 洪泽县| 苍山县| 三亚市| 岗巴县| 汽车| 乐至县| 阳信县| 武鸣县| 祥云县| 德令哈市| 深泽县| 务川| 临沭县| 宣城市|