小程序开发工具原生支持 ES6 的 Promise(大部分情况不用另外安装 es6-promise 包)。
特殊场景自己要加载的话也可以用 npm 的 es6-promise 包。
下载 es6-promise-min.js 或 es6-promise.js 置于根目录下的 libs 文件夹下。
一、处理普通的异步操作
import Promise from '../libs/es6-promise-min'
new Promise((resolve, reject) => {
// 异步操作
request('/shop/queryShopBox', params, 'GET', (res)=>{
resolve(res)
})
}).then(res => {
console.log(res)
}).finally(() => {
console.log('完成')
})
二、处理小程序异步 API
小程序提供的 API 大部分都是异步操作的,如果不想使用层层的嵌套回调,我们可以使用封装过的 Promise 实现链式操作。
封装 Promise:
import Promise from '../libs/es6-promise-min'
function wxPromise(fn) {
return function (obj = {}) {
return new Promise((resolve, reject) => {
obj.success = function (res) {
resolve(res)
}
obj.fail = function (res) {
reject(res)
}
fn(obj)
})
}
}
export {
wxPromise
}
使用wxPromise示例:
wxPromise(wx.getStorage)({key: 'name'})
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
wxPromise 后面的第一个小括号传微信提供的 API 名字,第二个小括号传 API 需要的参数。