Proxy kapselt asynchrone Aufrufe kleiner Programme

hzc
Freigeben: 2020-06-05 10:00:09
nach vorne
2942 Leute haben es durchsucht

Das letzte Mal habe ich geschrieben:

Für diejenigen, die das letzte Mal nicht gelesen haben, hier ist es: using 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;
        }, {});
}
Nach dem Login kopieren
// pages/somepage/somepage.jsimport { toAsync } = require("../../utils/async");
// ...const awx = toAsync(["login", "request"]);await awx.login();await awx.request({...});
Nach dem Login kopieren

Ist das nicht schon so? gekapselt?

Diesmal habe ich ein anderes Paket geschrieben. Weil es wirklich nervig ist, mehrere toAsync-Aufrufe in einem kleinen Programm zu schreiben!


Kann es einmal gekapselt und überall aufgerufen werden? fähig! Kapseln Sie alle während der Initialisierung verwendeten Methoden. Es wird jedoch zwangsläufig Auslassungen geben.

Kann es einmal gekapselt und überall ohne Initialisierung aufgerufen werden?

Ja! Rufen Sie den Proxy-Master auf:

// 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);
        }
    });
}
Nach dem Login kopieren
// app.jsimport { asyncProxy } from "./utils/async";

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

Erläuterung:

Da awx das wx-Objekt des Proxys ist, lautet beim Aufruf von awx.login() tatsächlich get(wx, „login“ des Proxys zuerst aufgerufen), finden Sie etwas, das Sie anstelle von wx.login verwenden können.

Suchen Sie gemäß der Logik im obigen Code zunächst nach dem mit wxPromisify() gekapselten Ergebnis aus dem Cache. Wenn nicht, kapseln Sie es zuerst in eine Funktion des Versprechens Netzwerk, speichern Sie es im Cache und geben Sie es dann zurück.

Eine intuitive Beschreibung, wahrscheinlich so:

awx.login();
   ^^^^^^   get(wx, "login")
Nach dem Login kopieren

Empfohlenes Tutorial: „WeChat Official Account

Das obige ist der detaillierte Inhalt vonProxy kapselt asynchrone Aufrufe kleiner Programme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!