uniapp如何將微信小程序API封裝為Promise


 1 var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/;
 2 
 3 var CALLBACK_API_RE = /^on/;
 4 // 微信同步api
 5 function isSyncApi(name) {
 6     return SYNC_API_RE.test(name);
 7 }
 8   
 9 function isCallbackApi(name) {
10     return CALLBACK_API_RE.test(name);
11 }
12 // 是否應該使用promise
13 function shouldPromise(name) {
14     if (isSyncApi(name)) {
15       return false;
16     }
17     if (isCallbackApi(name)) {
18       return false;
19     }
20     return true;
21   }
22 // 使用promise
23 function handlePromise(promise) {
24     return promise.then(function (data) {
25       return [null, data];
26     }).
27     catch(function (err) {return [err];});
28   }
29 // 異步處理的使用promise
30 function promisify(name, api) {
31     if (!shouldPromise(name)) {
32         return api;
33     }
34     return function promiseApi() {
35         var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
36         // 參數 --> 數組(可以簡化吧)
37         for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
38             params[_key - 1] = arguments[_key];
39         }
40         // 如果以原始方式傳入則調用原始方式
41         if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
42             return api.apply(void 0, [options].concat(params));
43         }
44         // 否則返回promise方式
45         return handlePromise(
46         new Promise(
47             function (resolve, reject) {
48                 // options 為url等等配置
49             api.apply(void 0, [Object.assign({}, options, {
50                 success: resolve,
51                 fail: reject })].concat(
52             params)
53         );
54         /* eslint-disable no-extend-native */
55         Promise.prototype.finally = function (callback) {
56             // Promise 構造器對象,它身上有Promise.resolve()
57             var promise = this.constructor;
58             // Promise 實例化對象
59             return this.then(
60             function (value) {return promise.resolve(callback()).then(function () {return value;});},
61             function (reason) {return promise.resolve(callback()).then(function () {
62                 throw reason;
63             });});
64 
65         };
66         }));
67     };
68 }

都附上標注了,純屬個人理解,自己改吧改吧就能用,本人技術比較渣,只能學別人的代碼!自己標注的,有不對的地方可以留言!不懂得地方也可以問我


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM