將小程序的異步回調(diào)寫(xiě)法改成promise風(fēng)格
好處:可以直接使用async等基于promise的異步語(yǔ)法邪码。
promisify.js
const promisify = (originFunction) => {
return (params = {}) => {
return new Promise((resolve, reject) => {
let returnFunctionObj = {
success: (success_info) => {
resolve(success_info)
},
fail: (fail_info) => {
reject(fail_info)
}
}
// 使用promise.then來(lái)接受success,catch來(lái)接受fail裕菠,本文件沒(méi)考慮complete回調(diào),需要的話可以也resolve并返回不同的參
// 使用Object.assign混合原始o(jì)ptions闭专,這樣你依然可以傳入配置項(xiàng)
params = Object.assign(params, returnFunctionObj);
originFunction(params)
})
}
}
export default promisify;
pwx.js
import promisify from "@/utils/promisify.js"; // 引用上面的文件
const pwx_handler = {
get(target,name){
if(name in wx){
return promisify(wx[name])
}
}
}
let pwx = new Proxy({},pwx_handler)
// 使用Proxy監(jiān)聽(tīng)奴潘,并匹配wx對(duì)應(yīng)的方法
export default pwx
some.js
import pwx from '@/utils/pwx.js';
// 即可通過(guò)pwx來(lái)直接引用wx對(duì)象擁有的方法
pwx
.login({/** 傳入你想要的配置 **/})
.then(resp => {
return pwx.getUserInfo({ lang: "zh_CN" });
})
.then(resp => {
pwx.setStorage({
key: "userInfo",
data: resp.rawData
});
})
.catch(resp => {
console.log(resp);
});