ホームページ >ウェブフロントエンド >jsチュートリアル >Promise によりコールバック例の共有が簡素化される

Promise によりコールバック例の共有が簡素化される

小云云
小云云オリジナル
2018-02-07 15:36:451487ブラウズ

この記事では主に WeChat アプレットについて説明します。Promise を使用してコールバック インスタンスの共有を簡素化することで、皆さんのお役に立てれば幸いです。

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 を使用してコードを簡素化する方法を分析しましょう

WeChat アプレットの非同期 API は成功と失敗の形式であるため、誰かがそのようなメソッドをカプセル化しました:

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=>{

})

簡略化されたコールバックではインデントが 1 つ減り、コールバック関数が 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)
})

簡略化の効果が非常に明白であることがわかります。

Webページやnodejsなどにも適用できます。

関連する推奨事項:

WeChat アプレット Promise の簡略化されたコールバック例の共有

js での Promise の例の分析

jQuery の Promise の正しい使用方法

以上がPromise によりコールバック例の共有が簡素化されるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。