ホームページ > 記事 > WeChat アプレット > プロキシは小さなプログラムの非同期呼び出しをカプセル化します。
前回書きました:
前回を読んでいない人のために、ここにあります: Use
async/await
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({...});# in WeChat ミニ プログラム ##これはすでにカプセル化されているのではありませんか? 今回は別のパッケージを書きました。なぜなら、小さなプログラムで複数の toAsync 呼び出しを記述するのは本当に面倒だからです。
// 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 の代わりに使用するものを見つけてください。 上記のコードのロジックによると、まず wxPromisify() を使用してカプセル化された結果をキャッシュから探します。存在する場合は直接返します。存在しない場合は、最初にそれを Promise の関数にカプセル化します。ネットワークにアクセスし、キャッシュに保存してから返します。 直観的な説明は次のようになります:
awx.login(); ^^^^^^ get(wx, "login")推奨チュートリアル: 「
WeChat パブリック アカウント
」以上がプロキシは小さなプログラムの非同期呼び出しをカプセル化します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。