微信小程序免费_微信小程序使用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页面
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。