温州翁山乡Proxy封装小程序的异步调用
阅读 18972 · 发布日期 2020-08-24 17:26 · 温州优光网络科技有限公司|建站|APP小程序制作|做网站SEO推广优化
【摘要】
上回写到:没看上回的同学,在这里:在微信小程序中使用 async/awaitfunction wxPromisify(fn) {
return async function(args) {
return new Promise((resolve, reject) => {
... 【温州小程序开发,温州微信公众号,平阳做网站,平阳网站建设公司,平阳小程序商城制作,昆阳万全做网站,鳌江水头小程序,萧江腾蛟微信公众号,山门顺溪南雁海西南麂凤卧麻步怀溪网络网店服务,政采云网店管理服务】...
上回写到:
没看上回的同学,在这里:
在微信小程序中使用 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({
...}
);
这不已经封装过了吗?这回写的是不一样的封装。
因为,一个小程序里要写好多个 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封装小程序的异步调用的详细内容,更多请关注php中文网其它相关文章!
微信
分享相关标签:
微信小程序,Proxy本文转载于:
segmentfault,如有侵犯,请联系a@php.cn删除
上一篇:
微信小程序 绝对路径 require
下一篇:
如何实现微信小程序在电脑上玩相关文章相关视频微信小程序怎么实现购物车功能?(方法介绍)微信小程序如何开发一款小游戏?(实战教程)微信小程序怎么实现九宫格跳转微信小程序刮刮卡的实现Proxy封装小程序的异步调用初识微信小程序(3)初识微信小程序(4)深入了解微信小程序(一) [温州做小程序]