微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Promise对象

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] 举报,一经查实,本站将立刻删除。

相关推荐