小程序的Promise简化回调

这次给大家带来小程序Promise简化回调,小程序Promise简化回调的注意事项有哪些,下面就是实战案例,一起来看一下。

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

了解什么是 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=>{})

登录后复制

小程序的Promise简化回调

getSystemInfo

可以看到简化后的回调里少了一个缩进,并且回调函数从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)})

登录后复制

小程序的Promise简化回调

简化回调

可以看到简化效果非常明显。

同样适用于网页或者nodejs等中。

参考

Promise 对象

源代码

tomfriwel/MyWechatAppDemo 的promisePage页面

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

React开发时的eslint配置

Vue枚举类型实现HTML

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

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

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

(0)
上一篇 2025年3月8日 15:48:23
下一篇 2025年3月8日 03:38:58

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

相关推荐

  • 微信小程序里wx:for和wx:for-item有什么区别

    这次给大家带来微信小程序里wx:for和wx:for-item有什么区别,微信小程序里使用wx:for和wx:for-item的注意事项有哪些,下面就是实战案例,一起来看一下。 wx:for=”{{list}}”用来…

    编程技术 2025年3月8日
    200
  • 微信小程序block应该如何使用

    这次给大家带来微信小程序block应该如何使用,微信小程序block使用的注意事项有哪些,下面就是实战案例,一起来看一下。 经过一年的发展,微信小程序发展火热,本期就介绍下小程序的一些使用。 在安卓中我们经常会使用ListView/Grad…

    2025年3月8日
    200
  • 微信小程序里怎么做出滚动消息通知效果

    这次给大家带来微信小程序里怎么做出滚动消息通知效果,微信小程序里做出滚动消息通知效果的注意事项有哪些,下面就是实战案例,一起来看一下。 index.wxml {{item.title}} 登录后复制 index.js //index.js/…

    编程技术 2025年3月8日
    200
  • 微信小程序如何调用录音与播放录音

    这次给大家带来微信小程序如何调用录音与播放录音,微信小程序调用录音与播放录音的注意事项有哪些,下面就是实战案例,一起来看一下。 小程序中提供了两种录音的API 旧版录音功能 首先启动录音,然后停止录音即可拉到音频的临时地址 启动录音: va…

    编程技术 2025年3月8日
    200
  • 在微信小程序里添加弹出对话框

    这次给大家带来在微信小程序里添加弹出对话框,在微信小程序里添加弹出对话框的注意事项有哪些,下面就是实战案例,一起来看一下。 关键代码 ①、index.wxml 提示:{{tip}}点击我弹出modal对话框 您好,我是modal对话框 登录…

    编程技术 2025年3月8日
    200
  • 如何从小程序中提取公用函数到util.js

    本篇文章给大家分享的内容是如何从小程序中提取公用函数到util.js ,有着一定的参考价值,有需要的朋友可以参考一下 在小程序中,定义了一项工具文件utils,此文件的js旨在本文件之内有效,当其他子页面想调用其中的js方法或者变量时,需要…

    2025年3月8日
    200
  • 微信小程序怎样使图片上传至服务器

    这次给大家带来微信小程序怎样使图片上传至服务器,微信小程序使图片上传至服务器的注意事项有哪些,下面就是实战案例,一起来看一下。 -wxml 发布项目 /**选择图片 */ choose: function () { var that = t…

    编程技术 2025年3月8日
    200
  • Promise实现异步

    这次给大家带来Promise实现异步,Promise实现异步的注意事项有哪些,下面就是实战案例,一起来看一下。 为了保证可读性,本文采用意译而非直译,并且对源代码进行了大量修改。另外,本文版权归原作者所有,翻译仅用于学习。 使用Promis…

    编程技术 2025年3月8日
    200
  • 使用微信小程序block步奏详解

    这次给大家带来使用微信小程序block步奏详解 ,使用微信小程序block的注意事项有哪些,下面就是实战案例,一起来看一下。 经过一年的发展,微信小程序发展火热,本期就介绍下小程序的一些使用。 在安卓中我们经常会使用ListView/Gra…

    2025年3月8日
    200
  • 微信小程序api封装

    这次给大家带来微信小程序api封装,微信小程序api封装的注意事项有哪些,下面就是实战案例,一起来看一下。 promise化的原因 微信小程序的api用的是对象参数回调模式,很容易造成回调地狱,代码难以阅读,判断,修改 和调试. 微信小程序…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论