下面是详细讲解 "JS中promise化微信小程序api" 的完整攻略。
什么是Promise
Promise是es6中新增加的跟异步有关的特性,用于异步操作的管理。使用Promise后,我们可以像同步代码一样来操作异步代码,从而更好的管理异步代码。
在我们使用异步的时候,通常会遇到一些棘手的问题,例如:
- 回调地狱 (callback hell)
- 共享作用域
Promise的出现可以很好的解决这样的问题,它的基本思想是把异步操作抽象成Promise对象,Promise对象代表了一个异步操作的最终结果,从而避免了层层嵌套回调函数的情况。
为什么要Promise化小程序API
小程序API是异步回调方式实现的,如果我们把程序逻辑写成这种回调嵌套的形式,在代码复杂的时候会变得非常难以维护。因此将小程序API Promise化可以更好地管理异步操作,减少嵌套回调的代码量,更加清晰明了。
Promise化微信小程序API
下面我们通过一个具体的例子,来看如何Promise化小程序API。我们以获取用户信息接口为例,根据官方API文档(https://developers.weixin.qq.com/miniprogram/dev/api/wx.getUserInfo.html)我们知道wx.getUserInfo接口的参数包括success、fail、complete回调函数,返回的结果包括userInfo、rawData、signature、encryptedData、iv。
我们先看一下wx.getUserInfo接口的正常使用方法:
wx.getUserInfo({
success: function (res) {
console.log(res);
},
fail: function (error) {
console.log(error);
}
})
如果我们要Promise化这个接口的使用,我们可以用以下方式:
function getUserInfo() {
return new Promise((resolve, reject) => {
wx.getUserInfo({
success: res => resolve(res),
fail: error => reject(error)
})
})
}
我们通过Promise包裹了wx.getUserInfo接口,定义了一个promise函数getUserInfo,这个函数返回一个Promise对象。当我们调用getUserInfo的时候,它会返回一个Promise对象,我们可以用then和catch对其进行处理:
getUserInfo().then(res => {
console.log(res)
}).catch(error => {
console.log(error)
})
这样做的结果是我们可以直接调用promise函数getUserInfo,而不需要嵌套回调,代码结构更加清晰。
除了以上这个例子之外,我们可以通过相同的方式来Promise化微信小程序API的其他接口,例如:
//Promise化小程序API之wx.login
function login() {
return new Promise((resolve, reject) => {
wx.login({
success: res => resolve(res),
fail: error => reject(error)
})
})
}
//Promise化小程序API之wx.request
function request(options) {
return new Promise((resolve, reject) => {
wx.request({
...options,
success: res => resolve(res),
fail: error => reject(error)
})
})
}
到这里,我们就理清了如何Promise化微信小程序API的整个流程。在实际开发中,我们需要将所以的小程序API封装成带有Promise的函数,以便于开发者更好的管理异步操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中promise化微信小程序api - Python技术站