西溪鄉(xiāng)Proxy封裝小程序的異步調(diào)用

閱讀 23586  ·  發(fā)布日期 2020-08-24 17:26  ·  溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】 上回寫到:沒(méi)看上回的同學(xué),在這里:在微信小程序中使用 async/awaitfunction wxPromisify(fn) { return async function(args) { return new Promise((resolve, reject) => { ... 【溫州小程序開(kāi)發(fā),溫州微信公眾號(hào),平陽(yáng)做網(wǎng)站,平陽(yáng)網(wǎng)站建設(shè)公司,平陽(yáng)小程序商城制作,昆陽(yáng)萬(wàn)全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號(hào),山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...

Proxy封裝小程序的異步調(diào)用

上回寫到:
沒(méi)看上回的同學(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)封裝過(guò)了嗎?這回寫的是不一樣的封裝。
因?yàn)椋粋€(gè)小程序里要寫好多個(gè) toAsync 調(diào)用,真的很煩吶!能不能一次封裝,到處調(diào)用?能!把所有用到的方法都在初始化的時(shí)候封裝起來(lái)。
可是,難免會(huì)有遺漏。
能不能一次封裝,到處調(diào)用,還不需要初始化?能!祭出 Proxy 大神:
// utils/asyncjsfunction wxPromisify(fn) {
... }
// 前面已經(jīng)定義過(guò)了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 對(duì)象,調(diào)用 awx.login() 的時(shí)候,實(shí)際是先調(diào)用代理的 get(wx, "login"),找到用來(lái)代替 wx.login 的東西。
根據(jù)上面代碼里的邏輯,先從 cache 里找使用 wxPromisify() 封裝的結(jié)果,若有,直接返回;若沒(méi)有,先封裝成 Promise 網(wǎng)絡(luò)的函數(shù),存入 cache,再返回。
直觀一點(diǎn)描述,大概是這樣:
awx.login();
^^^^^^ get(wx, "login")推薦教程:
《微信公眾號(hào)》以上就是Proxy封裝小程序的異步調(diào)用的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
微信小程序,Proxy本文轉(zhuǎn)載于:
segmentfault,如有侵犯,請(qǐng)聯(lián)系[email protected]刪除
上一篇:
微信小程序 絕對(duì)路徑 require
下一篇:
如何實(shí)現(xiàn)微信小程序在電腦上玩相關(guān)文章相關(guān)視頻微信小程序怎么實(shí)現(xiàn)購(gòu)物車功能?(方法介紹)微信小程序如何開(kāi)發(fā)一款小游戲?(實(shí)戰(zhàn)教程)微信小程序怎么實(shí)現(xiàn)九宮格跳轉(zhuǎn)微信小程序刮刮卡的實(shí)現(xiàn)Proxy封裝小程序的異步調(diào)用初識(shí)微信小程序(3)初識(shí)微信小程序(4)深入了解微信小程序(一) [溫州做小程序]