成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

JeOam / 2962人閱讀

摘要:了解什么是對(duì)象在項(xiàng)目中,會(huì)出現(xiàn)各種異步操作,如果一個(gè)異步操作的回調(diào)里還有異步操作,就會(huì)出現(xiàn)回調(diào)金字塔?;卣{(diào)金字塔的簡(jiǎn)化效果那么再來(lái)看看最開(kāi)始的那個(gè)回調(diào)金字塔登錄請(qǐng)求獲取請(qǐng)求可以看到簡(jiǎn)化效果非常明顯。同樣適用于網(wǎng)頁(yè)或者等中。

了解什么是 Promise 對(duì)象

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

比如下面這種
// 模擬獲取code,然后將code傳給后臺(tái),成功后獲取userinfo,再將userinfo傳給后臺(tái)
// 登錄
wx.login({
    success: res => {
        let code = res.code
        // 請(qǐng)求
        imitationPost({
            url: "/test/loginWithCode",
            data: {
                code
            },
            success: data => {
                // 獲取userInfo
                wx.getUserInfo({
                    success: res => {
                        let userInfo = res.userInfo
                        // 請(qǐng)求
                        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來(lái)進(jìn)行簡(jiǎn)化代碼

因?yàn)槲⑿判〕绦虍惒絘pi都是success和fail的形式,所有有人封裝了這樣一個(gè)方法:

promisify.js

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

先看最簡(jiǎn)單的:

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

    }
})

使用上面的promisify.js簡(jiǎn)化后:

const promisify = require("./promisify")
const getSystemInfo = promisify(wx.getSystemInfo)

getSystemInfo().then(res=>{
    // success
    console.log(res)
}).catch(res=>{

})

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

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

那么再來(lái)看看最開(kāi)始的那個(gè)回調(diào)金字塔

const promisify = require("./promisify")
const login = promisify(wx.login)
const getSystemInfo = promisify(wx.getSystemInfo)

// 登錄
login().then(res => {
    let code = res.code
    // 請(qǐng)求
    pImitationPost({
        url: "/test/loginWithCode",
        data: {
            code
        },
    }).then(data => {
        // 獲取userInfo
        getUserInfo().then(res => {
            let userInfo = res.userInfo
            // 請(qǐng)求
            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)
})

可以看到簡(jiǎn)化效果非常明顯。

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

參考

Promise 對(duì)象

源代碼

tomfriwel/MyWechatAppDemo 的promisePage頁(yè)面

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107263.html

相關(guān)文章

  • 信小程序異步API轉(zhuǎn)為Promise,簡(jiǎn)化異步編程,告別層層回調(diào)

    摘要:微信官方?jīng)]有給出來(lái)處理異步操作,而官方異步的又非常多,這使得多異步編程會(huì)層層回調(diào),代碼一復(fù)雜,回調(diào)起來(lái)就想砸電腦。是一個(gè)轉(zhuǎn)換微信小程序異步為的一個(gè)工具庫(kù)優(yōu)點(diǎn)避免小程序異步編程多次回調(diào)帶來(lái)的過(guò)多回調(diào)導(dǎo)致邏輯不清晰,篇幅過(guò)長(zhǎng)等問(wèn)題。 把微信小程序異步API轉(zhuǎn)化為Promise。用Promise處理異步操作有多方便,誰(shuí)用誰(shuí)知道。微信官方?jīng)]有給出Promise API來(lái)處理異步操作,而官方AP...

    antz 評(píng)論0 收藏0
  • 信小程序踩坑系列——從wx.request談?wù)劗惒教幚?/b>

    摘要:其實(shí)我們?cè)谕搅鞒讨胁耪f(shuō)返回,異步?jīng)]有返回這個(gè)概念或者說(shuō)異步返回是沒(méi)有意義的,異步對(duì)應(yīng)的是回調(diào),也就是說(shuō),對(duì)于一個(gè)異步函數(shù),我們應(yīng)該傳入一個(gè)回調(diào)函數(shù)來(lái)接收結(jié)果。 原文鏈接:https://www.xksblog.top/talk-... 見(jiàn)到wx.request的第一眼,就讓我想起了$.ajax這東西,使用起來(lái)確實(shí)有很多不方便,不能忍,幸好小程序是支持ES6語(yǔ)法的,所以可以使用pro...

    RdouTyping 評(píng)論0 收藏0
  • promise信小程序api

    摘要:化的原因微信小程序的用的是對(duì)象參數(shù)回調(diào)模式很容易造成回調(diào)地獄代碼難以閱讀判斷修改和調(diào)試微信小程序示例獲取用戶信息已經(jīng)授權(quán),可以直接調(diào)用獲取頭像昵稱,不會(huì)彈框可以將發(fā)送給后臺(tái)解碼出可以看出兩層的時(shí)候代碼就很別扭了化小程序編寫一個(gè)可以小程序的公 promise化的原因 微信小程序的api用的是對(duì)象參數(shù)回調(diào)模式,很容易造成回調(diào)地獄,代碼難以閱讀,判斷,修改 和調(diào)試. 微信小程序api示例 /...

    AlphaWatch 評(píng)論0 收藏0
  • 信小程序(新)必備知識(shí)

    摘要:組件化開(kāi)發(fā)小程序在未出現(xiàn)組件之前,要重用的話,只能簡(jiǎn)單復(fù)制粗暴黏貼組件化開(kāi)發(fā)的優(yōu)勢(shì)可復(fù)用代碼分離,可維護(hù)更重要定義組件先創(chuàng)建文件夾用于存放組件,然后再創(chuàng)建組件文件夾注意組件的文件名并不是組件名,而頁(yè)面文件名是頁(yè)面名,組件名是引用時(shí)才確定的引 組件化開(kāi)發(fā) 小程序在未出現(xiàn)組件之前,要重用的話,只能簡(jiǎn)單(復(fù)制)粗暴(黏貼) 組件化開(kāi)發(fā)的優(yōu)勢(shì): 1、可復(fù)用(wxml/wxss/js) 2、代...

    mengera88 評(píng)論0 收藏0
  • 帶你玩轉(zhuǎn)小程序開(kāi)發(fā)實(shí)踐|含直播回顧視頻

    摘要:小程序的視圖層目前使用作為渲染載體,而邏輯層是由獨(dú)立的作為運(yùn)行環(huán)境。比如小程序的,通信一次就像是寫情書所以,嚴(yán)格來(lái)說(shuō),小程序是微信定制的混合開(kāi)發(fā)模式。出棧入棧解決小程序接口不支持的問(wèn)題小程序的所有接口,都是通過(guò)傳統(tǒng)的回調(diào)函數(shù)形式來(lái)調(diào)用的。 作者:張利濤,視頻課程《微信小程序教學(xué)》、《基于Koa2搭建Node.js實(shí)戰(zhàn)項(xiàng)目教學(xué)》主編,滬江前端架構(gòu)師本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者及出處 小程...

    fxp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<