• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    微信小程序使用Promise簡化回調(diào)

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:20:09
    文檔

    微信小程序使用Promise簡化回調(diào)

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

    Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強大。它由社區(qū)最早提出和實現(xiàn),ES6 將其寫進了語言標(biāo)準(zhǔn),統(tǒng)一了用法,原生提供了Promise對象。

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

    了解什么是 Promise 對象

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

    比如下面這種

    // 模擬獲取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);
     });
     }
    }
    

    先看最簡單的:

    // 獲取系統(tǒng)信息
    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

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

    回調(diào)金字塔的簡化效果

    那么再來看看最開始的那個回調(diào)金字塔

    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)
    })
    
    

    簡化回調(diào)

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

    同樣適用于網(wǎng)頁或者nodejs等中。

    參考

    Promise 對象

    源代碼

    tomfriwel/MyWechatAppDemo 的promisePage頁面

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

    文檔

    微信小程序使用Promise簡化回調(diào)

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产成人精品综合网站| 国产精品九九九| 91精品国产麻豆国产自产在线 | 91视频国产精品| 亚洲欧美日韩国产精品影院| 国产精品 一区 在线| 国产精品亚洲精品观看不卡| 久久免费的精品国产V∧| 一本大道无码日韩精品影视| 精品久久综合1区2区3区激情| 久久精品国产一区| 99re久久精品国产首页2020| 久久精品国产亚洲精品2020 | 精品无码人妻久久久久久 | 精品三级在线观看| 精品人伦一区二区三区潘金莲 | 青青青青久久精品国产| 成人区人妻精品一区二区不卡视频| 亚洲国产精品无码一线岛国| 午夜精品久久久久9999高清| 精品人体无码一区二区三区| jizz国产精品| 99免费精品国产| 97久久精品人人做人人爽| 91自慰精品亚洲| 成人午夜精品亚洲日韩| 99久久精品九九亚洲精品| 91精品国产91久久久久久蜜臀| 99久久www免费人成精品| 尤物国产在线精品福利一区| 欧美日韩精品一区二区三区| 久久精品一区二区国产| 久久精品国产精品国产精品污| 国产成人久久精品区一区二区| 2020国产精品| 久久九九亚洲精品| 99久久婷婷国产综合精品草原| 国产精品视频全国免费观看| 精品国产一区二区22| 欧美国产精品va在线观看| 亚洲欧美一级久久精品|