Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供Promise对象。本文主要和大家介绍微信小程序使用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.jsmodule.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=>{

})

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)

})

简化回调

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

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

相关推荐:

php 小程序回调,微信小程序Promise简化回调实例分享相关推荐

  1. (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好

    转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...

  2. 【小程序】微信小程序云开发笔记详细教程(建议收藏)

    1- 前言 1.1 微信云开发是什么? 微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务. 开发者可以使用云开发快速开发小程序.小游戏.公众号网页等,并且原生打通微信开放能力. 开发者无需搭建 ...

  3. map和foreach的区别和应用场景_支付宝小程序和微信小程序,两者有何区别?

    原标题:支付宝小程序和微信小程序,两者有何区别? 自2017年1月微信推出小程序之后,小程序的发展势头便愈来愈猛.作为腾讯老对头的阿里,也开始投入小程序的研发.在一年多的开放公测后,支付宝小程序终于于 ...

  4. 怎么添加一个程序集_门店小程序,微信小程序怎么添加店铺

    现今随着互联网发展,越来越多选择网上购物代替实体店购物,微信作为最多人使用的社交软件,他的商机也被许多企业商家发展,进入微信分销小程序购物是现在最流行的购物方式,驱使很多实体店也纷纷加盟进驻门店分销小 ...

  5. 微信与php什么区别,微信小店和微信小程序的区别是什么?

    区别:微信小店的功能比较少,只拥有基本的商城购物功能,没有营销功能,因而只适合不需要营销推广的个人开店:而小程序则是支持各种功能开发,可以开发商城小程序,也可以开发各种营销推广功能,能够满足商家的多功 ...

  6. 【小程序】微信小程序开发技巧实用手册(自己做笔记用)

    [Css]Css和Html常用设计实例参考笔记(自己开发项目用)_敦厚的曹操的博客-CSDN博客_html和css的项目实例一.左右居中1.div等块元素左右居中margin: 0 auto;marg ...

  7. 如何制作一个微信小程序【微信小程序是怎么做的】

    为什么现在这么多人使用微信小程序呢?因为微信小程序除了便捷易开发,公司企业可以用来做小程序展示官网,商家也可以做小程序商城,甚至个人也可以拥有自己的小程序.那么如何制作一个微信小程序?微信小程序是怎么 ...

  8. 微信小游戏和微信小程序的区别与共同

    微信小游戏 小游戏的运行环境在 iOS 上是 JavaScriptCore,在 Android 上是 V8,都是没有 BOM 和 DOM 的运行环境,没有全局的 document 和 window 对 ...

  9. 微信小程序和微信小游戏的区别体现在哪?

    微信小程序和微信小游戏有什么区别?随着<羊了个羊>持续大火,很多人把开发目光投向了微信小游戏.虽然说微信小游戏是微信小程序的一种类型,但两者不仅仅是服务类目不同,所提供的部分小程序能力也不 ...

最新文章

  1. python简单代码运行_python代码如何运行
  2. tableau可视化数据分析60讲(十三)-tableau常用可视化视图(条形图折线图饼图)
  3. 时间序列数据的存储和计算 - 开源时序数据库解析
  4. Python 正则表达式(一)
  5. linux git ssh 配置文件,git bash配置ssh 登录 Linux的方法
  6. 【笔试/面试】排列组合与概率计算(三)
  7. Find命令使用详解及实例分析
  8. 【原创】C语言之父和Linux之父谁更伟大?
  9. 动态时间规整—DTW算法
  10. 最近朋友圈很火,有关全网vip影视自助建站系统是真的吗?靠谱吗?
  11. 客房管理系统java代码_java客房管理系统代码
  12. HANA数据库备份脚本案例(刘欣)
  13. 吞食天地2蜀汉英雄传1.5版图文攻略
  14. 明天! Imagination邀您共聚AIIA2020人工智能开发者大会
  15. 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 I
  16. 关于广州小狐科技有限公司
  17. 【秋招纪实录】一篇特别正经的【无领导小组讨论】经验分享
  18. 代码签名证书的时间戳验证码签名方法
  19. win32 简易版扫雷
  20. Python量化投资——投资组合的评价和可视化(上):计算收益率、波动率、最大回撤、阿尔法alpha、贝塔beta、夏普率Sharp等指标【源码+详解】

热门文章

  1. FATE框架安装后测试报错:ModuleNotFoundError: No module named ‘arch‘
  2. c 直接访问mysql_C语言访问MySQL数据库的方法
  3. c# 拼凑特定格式的报表打印
  4. rxjs处理http请求超时
  5. 基于Consul的数据库高可用架构【转】
  6. Python自学----- while if 列表结合,购物车程序
  7. js时间格式化函数(兼容IOS)
  8. Excel数据批量导入到数据库
  9. 在Windows上安装MySQL5.7
  10. 基于QQ服务器JavaMail邮箱SSL密码第三方发送邮件