免费国产欧美国日产_少妇AV一区二区三区无码_蜜桃精品av无码喷奶水小说_jk18禁网站视频_精产国品一二三级产品区别_被夫の上司に犯波多野结衣_78m成人手机免费看_最爽最刺激18禁视频_偷偷色噜狠狠狠狠的777米奇

易優(yōu)GEO 重磅上線 ~ 一站式GEO優(yōu)化工具,讓豆包、文心一言、DeepSeek 在回答中主動(dòng)推薦你的品牌,搶占AI流量入口!  點(diǎn)擊查看

小程序模板網(wǎng)

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

發(fā)布時(shí)間:2018-05-05 15:12 所屬欄目:小程序開發(fā)教程

了解什么是 Promise 對(duì)象在項(xiàng)目中,會(huì)出現(xiàn)各種異步操作,如果一個(gè)異步操作的回調(diào)里還有異步操作,就會(huì)出現(xiàn)回調(diào)***。比如下面這種// 模擬獲取code,然后將code傳給后臺(tái),成功后獲取userinfo,再將userinfo傳給后臺(tái) ...

 
 
 

了解什么是 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來進(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)化效果

那么再來看看最開始的那個(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)頁或者nodejs等中。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://m.szcjxy.com/wxmini/doc/course/24270.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢: 點(diǎn)擊咨詢
在線客服