Es6原生提供了promise对象
作用:异步操作,避免层层嵌套的回调函数
promise是一个对象,对象和函数的区别就是对象可以保存状态,而函数不可以(闭包除外)
使用.then回调无需层层传递callback,进行回调数据的获取
代码风格语法更容易理解跟维护
promise的三种状态和基础用法:
状态:pengding(进行中) / fulfilled(已成功) / rejected(已拒绝)
基础用法:
1 let promise = new Promise((resolve, reject) => { 2 resolve('success') 3 reject('error') 4 }) 5 6 promise.then((result) => { 7 console.log(result) 8 }, (result) => { 9 console.log(result) 10 })
promise的状态改变只能是 pending->reslove或者 pending->rejected,状态一旦改变则不能再变
Promise创建:
使用new调用promise构造器进行实例化
1 var promise = new Promise(function(resolve,reject){ 2 //异步处理 3 //处理结束后调用resolve或reject 4 })
promise最常用方法:
promise.then()
对于已经实例化过的promise对象可以调用promise.then()方法,传递resolve跟reject方法做为回调
1 promise.then(onFulfilled).catch(onRejected)
使用promise做个简单的小程序请求封装
1 const headUrl = 'https://test.com/' 2 const apiList = { 3 saleCount:headUrl+"api/account/saleCount" 4 } 5 6 const apiRequest = (url,method,data) =>{ 7 let promise = new Promise(function (resolve, reject) { 8 wx.request({ 9 url: url, 10 data: data ? data : null, 11 method: method, 12 header: { 'content-type':'application/json','token': getApp().globalData.token}, 13 success: function (res) { 14 //接口调用成功 15 resolve(res); //根据业务需要resolve接口返回的json的数据 16 }, 17 fail: function (res) { 18 // fail调用接口失败 19 reject({ errormsg: '网络错误,请稍后重试', code: -1 }); 20 } 21 }) 22 }); 23 return promise; //注意,这里返回的是promise对象 24 } 25 26 let saleCount = (data) => { 27 return new Promise((resolve, reject) => { 28 resolve(apiRequest(apiList.saleCount, 'post', data)) 29 }) 30 } 31 export default{ 32 saleCount:saleCount 33 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。