微信小程序免费_微信小程序使用Promise简化回调

摘要: 手机微信微信小程序应用Promise简单化回调函数 Promise 是多线程程序编写的一种处理计划方案,比传统式的处理计划方案——回调函数涵数和恶性事件——更有效和更强劲。它由小...

微信小程序使用Promise简化回调       本篇文章主要介绍了微信小程序使用Promise简化回调,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

在项目中,会出现各种异步操作,如果一个异步操作的回调里还有异步操作,就会出现回调金字塔。

比如下面这种

// 模拟获取code,,传给后台
// 登录
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来进行简化代码

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

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等中。

参考

源代码

的promisePage页面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。




联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:创建网站