Promise简化回调实例分享

本文主要和大家分享微信小程序:使用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来进行简化代码

因为微信小程序异步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简化回调实例分享

js中promise实例解析

jQuery的Promise如何正确使用

以上就是Promise简化回调实例分享的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787053.html

(0)
上一篇 2025年3月8日 18:00:54
下一篇 2025年3月8日 18:01:03

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 常见前端跨域解决方案分享

    什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。本文主要和大家介绍前端常见跨域解决方案的相关内容,包括对跨域的解释,常见跨域场景以及跨域解决方案,内容丰富,希望能帮助到大家。 广义的跨域: 1.) 资…

    编程技术 2025年3月8日
    200
  • vue粒子特效实例分享

    本文主要和大家介绍vue 粒子特效的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 实现效果: 没错,你看到的上图那些类似于星座图的点和线,是由vue-particles生成的,而且…

    2025年3月8日
    200
  • 在Vue中highCharts绘制3d饼图实例分享

    本文主要和大家介绍在vue中highcharts绘制3d饼图实例,highcharts是国外知名基于javascript的图表库。由于中文官网的vue中使用highcharts配置繁琐并且需要引入jquery作为依赖,所以弃用。希望本文能帮…

    2025年3月8日
    200
  • 使JavaScript进行断舍离的函数分享

    本文主要和大家介绍了用函数式编程对javascript进行断舍离,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 关于DHTML DHTML是Dynamic HTML的简称,就是动态的html…

    编程技术 2025年3月8日
    200
  • JavaScript相等性判断分享

    JavaScript提供三种不同的值比较操作 严格相等 “===” 宽松相等 “==” Object,is(es6d的新特性) 本文主要和大家分享JavaScript相等性判断,希望能帮助到大…

    2025年3月8日
    200
  • Nginx的location匹配实例分享

    本文主要和大家分享nginx的location匹配实例,由于团队在进行前后端分离,前端接管了nginx和node层,在日常的工作中,跟nginx打交道的时候挺多的。之前对location的匹配规则是一知半解的,为了搞明白location是如…

    编程技术 2025年3月8日
    200
  • Vue+webpack基础配置分享

    最近在学习webpack,跟着课程一个单页面应用,在这里记录一下。这个部分主要讲了如何配置webpack的环境,以及webpack dev的配置。记录比较粗略,后续会更新。本文主要和大家介绍了vue+webpack项目基础配置教程,需要的朋…

    2025年3月8日 编程技术
    200
  • JS操作剪贴板代码分享

    javascript可以轻松操作客户端剪贴板内容,不过只适用ie5以上浏览器。javascript可以使用window.clipboarddata对象处理剪贴板内容。保存到剪贴板的方法setdata(param1, param2)。本文主要…

    编程技术 2025年3月8日
    200
  • js实现md5加密插件代码分享

    本文主要和大家分享js实现md5加密插件代码,希望能帮助到大家。 //使用方法://引入文件//var MD5=MD5.createMD5String(yourSrting);(function(globle,factory){//判断执行…

    编程技术 2025年3月8日
    200
  • JS抛物线动画操作实例分享

    在做无人便利小程序的项目中,某一天产品说要像某产商产品学习,给添加购物车增加抛物线小球动画。本文主要给大家详细分析了js抛物线动画制作过程以及相关的代码实例分享,有兴趣的朋友参考下。 先给大家看下效果图 分析 这种不固定起始位置的动画,自然…

    2025年3月8日
    200

发表回复

登录后才能评论