91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Promise簡化回調

發布時間:2021-03-11 13:47:02 來源:億速云 閱讀:106 作者:小新 欄目:移動開發

這篇文章主要介紹如何使用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=>{

})

可以看到簡化后的回調里少了一個縮進,并且回調函數從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簡化回調”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仁化县| 蓝田县| 榆社县| 临高县| 云阳县| 彭山县| 固阳县| 轮台县| 乌苏市| 南乐县| 青龙| 洪雅县| 保定市| 山东| 金堂县| 呼和浩特市| 淅川县| 岗巴县| 调兵山市| 景泰县| 洛阳市| 桦川县| 九龙县| 鲁甸县| 唐山市| 讷河市| 齐河县| 辉县市| 郎溪县| 南靖县| 永丰县| 凤阳县| 永嘉县| 凉城县| 吴旗县| 炎陵县| 六枝特区| 应城市| 深泽县| 乐昌市| 清原|