北林垟Proxy封裝小程序的異步調(diào)用
閱讀 23630 · 發(fā)布日期 2020-08-24 17:26 · 溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】
上回寫到:沒看上回的同學(xué),在這里:在微信小程序中使用 async/awaitfunction wxPromisify(fn) {
return async function(args) {
return new Promise((resolve, reject) => {
... 【溫州小程序開發(fā),溫州微信公眾號(hào),平陽做網(wǎng)站,平陽網(wǎng)站建設(shè)公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號(hào),山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...
上回寫到:
沒看上回的同學(xué),在這里:
在微信小程序中使用 async/awaitfunction 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({
...}
);
這不已經(jīng)封裝過了嗎?這回寫的是不一樣的封裝。
因?yàn)椋粋€(gè)小程序里要寫好多個(gè) toAsync 調(diào)用,真的很煩吶!能不能一次封裝,到處調(diào)用?能!把所有用到的方法都在初始化的時(shí)候封裝起來。
可是,難免會(huì)有遺漏。
能不能一次封裝,到處調(diào)用,還不需要初始化?能!祭出 Proxy 大神:
// utils/asyncjsfunction wxPromisify(fn) {
... }
// 前面已經(jīng)定義過了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({
...}
);
解釋:
因?yàn)?awx 是代理的 wx 對象,調(diào)用 awx.login() 的時(shí)候,實(shí)際是先調(diào)用代理的 get(wx, "login"),找到用來代替 wx.login 的東西。
根據(jù)上面代碼里的邏輯,先從 cache 里找使用 wxPromisify() 封裝的結(jié)果,若有,直接返回;若沒有,先封裝成 Promise 網(wǎng)絡(luò)的函數(shù),存入 cache,再返回。
直觀一點(diǎn)描述,大概是這樣:
awx.login();
^^^^^^ get(wx, "login")推薦教程:
《微信公眾號(hào)》以上就是Proxy封裝小程序的異步調(diào)用的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
微信小程序,Proxy本文轉(zhuǎn)載于:
segmentfault,如有侵犯,請聯(lián)系[email protected]刪除
上一篇:
微信小程序 絕對路徑 require
下一篇:
如何實(shí)現(xiàn)微信小程序在電腦上玩相關(guān)文章相關(guān)視頻微信小程序怎么實(shí)現(xiàn)購物車功能?(方法介紹)微信小程序如何開發(fā)一款小游戲?(實(shí)戰(zhàn)教程)微信小程序怎么實(shí)現(xiàn)九宮格跳轉(zhuǎn)微信小程序刮刮卡的實(shí)現(xiàn)Proxy封裝小程序的異步調(diào)用初識(shí)微信小程序(3)初識(shí)微信小程序(4)深入了解微信小程序(一) [溫州做小程序]
為您推薦
- 百度智能小程序SWAN 視圖基礎(chǔ)數(shù)據(jù)綁定怎么做 2020-08-24
- 百度智能小程序SWAN 視圖是什么? 2020-08-24
- 百度智能小程序啟動(dòng)頁面的代碼如何設(shè)置 2020-08-24
- 百度智能小程序SWAN 生命周期是什么 2020-08-24
- 百度智能小程序如何配置全局?jǐn)?shù)據(jù) 2020-08-24
- 百度智能小程序?window、tabBar如何優(yōu)化和調(diào)整 2020-08-24
- 百度智能小程序?pages是什么 2020-08-24
- 百度智能小程序配置界面、路徑如何優(yōu)化 2020-08-24