小程序把接口 Promise 化
在使用小程序接口的时候我们发现小程序的接口都是使用 success
和 fail
进行请求成功和失败处理的。习惯了用 Promise
处理方式后发现这样写代码有点不美观(容易形成回调地狱),并且行数也会增多。接下来就来讲讲如何把小程序接口 Promise
化。
1、首先,我们要明确我们要解决的目的:把小程序接口 Promise
化。
2、 然后我们想象一下我们要实现一个怎么样的效果
原来的情况:
wx.request({
url: '',
data: {},
...,
success:res => {
...
},
fail: err => {
...
}
})
实现后的情况:
wx.request({
url: '',
data: {},
...,
}).then(res => {
...
})
对比后发现,我们要解决的问题实际上只是把 success
、fail
提取出来,其他都是不变的,接下来我们看看是怎么封装的
function wxApiPromise (name, options) {
return new Promise ((success, fail) => {
let obj = {...options, ...{success, fail}};
return wx[name](obj);
})
}
使用方式
wxApiPromise (request, {
data: {a: 1}
}).then(res => {
console.log(res);
})
这样就完工啦,封装中有两点要注意的地方:
- 第一个是
ES6
的扩展运算符...
可以把两个对象合并成一个对象,如果不懂的小伙伴可以学习一下阮一峰老师的 ES6 => http://es6.ruanyifeng.com/#docs/array - 第二点就是为什么
return Promise
的时候不用resolve
和reject
,其实原因很简单,我们要做的就是用resolve
和reject
来代替 小程序中的success
和fail
。
在下面这行中其实就已经可以用这个 obj
代替小程序中的参数了,我们需要更改 Promise 中形参 resolve
和 reject
与小程序参数对应即可
let obj = {...options, ...{success, fail}};