Proxy 패키지 위 챗 애플 릿 의 비동기 호출
2682 단어 애플 릿대리비동기async-await
지난번 동창 을 보지 못 했 습 니 다.여기 있 습 니 다.
위 챗 애플 릿 에 async/await 사용 하기
// utils/async.js
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.js
import { toAsync } = require("../../utils/async");
// ...
const awx = toAsync(["login", "request"]);
await awx.login();
await awx.request({...});
이것 은 이미 봉인 되 지 않 았 습 니까?
이번에 쓴 것 은 다른 봉투 다.작은 프로그램 에 여러 개
toAsync
호출 을 써 야 하기 때문에 정말 귀 찮 습 니 다!한 번 에 포장 해서 여기저기 서 호출 할 수 있 습 니까?네!사용 하 는 모든 방법 을 초기 화 할 때 밀봉 하 다.하지만 빠 질 수 밖 에 없다.
한 번 에 포장 하고 여기저기 서 호출 할 수 있 습 니까?초기 화 할 필요 가 없습니다.
네!프 록 시 대신 에 게 제사 지내 기:
// utils/asyncjs
function 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.js
import { 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")
공중 번호 변경 객 잔 을 주목 하 세 요.
다 봤 으 면 가지 말고 좋아요 눌 러 주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
애플 릿 이미지 새로 고침, nginx 재 작성 url 제거 인자이전에 nginx 로 이미지 서버 를 만 들 었 는데 전단 에 작은 프로그램 을 사 용 했 습 니 다. 작은 프로그램 이 출시 된 후에 그림 이 새로 고침 되 지 않 는 것 을 발 견 했 습 니 다. 조사 한 결과 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.