<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        微信小程序使用Promise簡化回調

        來源:懂視網 責編:小采 時間:2020-11-27 22:20:09
        文檔

        微信小程序使用Promise簡化回調

        微信小程序使用Promise簡化回調:Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。 所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(
        推薦度:
        導讀微信小程序使用Promise簡化回調:Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。 所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(

        Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。

        所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(通常是一個異步操作)的結果。從語法上說,Promise 是一個對象,從它可以獲取異步操作的消息。Promise 提供統一的 API,各種異步操作都可以用同樣的方法進行處理。

        了解什么是 Promise 對象

        在項目中,會出現各種異步操作,如果一個異步操作的回調里還有異步操作,就會出現回調金字塔。

        比如下面這種

        // 模擬獲取code,然后將code傳給后臺,成功后獲取userinfo,再將userinfo傳給后臺
        // 登錄
        wx.login({
         success: res => {
         let code = res.code
         // 請求
         imitationPost({
         url: '/test/loginWithCode',
         data: {
         code
         },
         success: data => {
         // 獲取userInfo
         wx.getUserInfo({
         success: res => {
         let userInfo = res.userInfo
         // 請求
         imitationPost({
         url: '/test/saveUserInfo',
         data: {
         userInfo
         },
         success: data => {
         console.log(data)
         },
         fail: res => {
         console.log(res)
         }
         })
         },
         fail: res => {
         console.log(res)
         }
         })
         },
         fail: res => {
         console.log(res)
         }
         })
         },
         fail: res => {
         console.log(res)
         }
        })
        

        下面分析如何用Promise來進行簡化代碼

        因為微信小程序異步api都是success和fail的形式,所有有人封裝了這樣一個方法:

        promisify.js

        module.exports = (api) => {
         return (options, ...params) => {
         return new Promise((resolve, reject) => {
         api(Object.assign({}, options, { success: resolve, fail: reject }), ...params);
         });
         }
        }
        

        先看最簡單的:

        // 獲取系統信息
        wx.getSystemInfo({
         success: res => {
         // success
         console.log(res)
         },
         fail: res => {
        
         }
        })
        
        

        使用上面的promisify.js簡化后:

        const promisify = require('./promisify')
        const getSystemInfo = promisify(wx.getSystemInfo)
        
        getSystemInfo().then(res=>{
         // success
         console.log(res)
        }).catch(res=>{
        
        })
        

        getSystemInfo

        可以看到簡化后的回調里少了一個縮進,并且回調函數從9行減少到了6行。

        回調金字塔的簡化效果

        那么再來看看最開始的那個回調金字塔

        const promisify = require('./promisify')
        const login = promisify(wx.login)
        const getSystemInfo = promisify(wx.getSystemInfo)
        
        // 登錄
        login().then(res => {
         let code = res.code
         // 請求
         pImitationPost({
         url: '/test/loginWithCode',
         data: {
         code
         },
         }).then(data => {
         // 獲取userInfo
         getUserInfo().then(res => {
         let userInfo = res.userInfo
         // 請求
         pImitationPost({
         url: '/test/saveUserInfo',
         data: {
         userInfo
         },
         }).then(data => {
         console.log(data)
         }).catch(res => {
         console.log(res)
         })
         }).catch(res => {
         console.log(res)
         })
         }).catch(res => {
         console.log(res)
         })
        }).catch(res => {
         console.log(res)
        })
        
        

        簡化回調

        可以看到簡化效果非常明顯。

        同樣適用于網頁或者nodejs等中。

        參考

        Promise 對象

        源代碼

        tomfriwel/MyWechatAppDemo 的promisePage頁面

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        微信小程序使用Promise簡化回調

        微信小程序使用Promise簡化回調:Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。 所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: a级毛片毛片免费观看永久| 国产精品亚洲αv天堂无码| a毛片免费全部播放完整成| 国产亚洲福利在线视频| 久久99国产亚洲精品观看| 亚洲av再在线观看| 成年美女黄网站18禁免费 | 国产精品酒店视频免费看| 亚洲综合免费视频| 久久狠狠躁免费观看2020| 久久精品免费网站网| 国产精品亚洲专区在线播放| 亚洲国产精品综合久久20| 亚洲精品欧洲精品| 亚洲国产精久久久久久久| 国产aⅴ无码专区亚洲av麻豆| 国产乱子影视频上线免费观看| 无码中文字幕av免费放| 成人免费在线看片| 亚洲电影免费观看| 久久精品免费一区二区| 在免费jizzjizz在线播| 99在线视频免费| 久久久精品免费视频| 成在线人视频免费视频| 成人特级毛片69免费观看| 特级一级毛片免费看| 亚洲精品无码久久久久YW| 91丁香亚洲综合社区| 亚洲成年人免费网站| 亚洲精品国产手机| 亚洲日本国产乱码va在线观看| 亚洲人成网站在线播放影院在线| 亚洲国产精品lv| 亚洲高清在线mv| 亚洲综合色区中文字幕| 亚洲 欧洲 自拍 另类 校园| 亚洲国产欧美国产综合一区| 亚洲成a人片在线不卡一二三区| 久久人午夜亚洲精品无码区| 香蕉视频免费在线播放|