ES6 Promise
2017-05-08 10:56 改吧 阅读(510) 评论(4) 收藏 举报先说一下Promise的作用吧
首先可以实现异步编程
然后你有异步方法的时候,可以通过Promise的then方法来实现同步执行
Promise的resolve()就是保存结果,作为参数传给then()
reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。传给catch()
最近在做小程序,
小程序的request请求都是异步的,没有同步设置,然后就想着用Promise来同步代码,
最简单的就是用这种Promise,然后再then
// 获取用户地理位置
var p1 = new Promise(function(resolve, reject) {
util.getLocation(function(res) {
var point = {
latitude: res.latitude,
longitude: res.longitude
}
// app.globalData.point = point
that.setData({
point: point
})
resolve(that.data.point)
})
})
p1.then(function() {
util.wxAuthGet('/order/list', {
long:that.data.point.longitude,
lat: that.data.point.latitude,
type: that.data.type,
page: 1
}, function(data) {
var index = that.data.type - 1;
// 当前标签的列表
that.data.orderList[index] = data;
// 创建ad=[{},{},{}]
var ad = [];
for (var i = data.length - 1; i >= 0; i--) {
ad.push({})
};
that.data.animationData[index] = ad;
// 渲染
that.setData({
orderList: that.data.orderList,
animationData: that.data.animationData,
dataId: that.data.type
});
// 隐藏toast
wx.hideToast();
}, null, '', that);
这段代码的意思是获取自己的位置成功后获取数据,因为在小程序里面获取自己的位置也需要时间,我需要先获取地理位置再执行下面的代码
如果Promise里面有多个异步请求,for循环,可以用
Promise.all(addrs.map((item, index) => makePromise(item, that))).then(res => {
console.log(that.data.allDis)
// console.log(allDis)
console.log('这是在哪里进行')
for (var i = 0; i < addrs.length; i++) {
var dis = {
tDis: res[i].takeDis,
sDis: res[i].sendDis
}
that.data.allDis[cur].push(dis)
}
that.setData({
allDis: that.data.allDis
})
console.log('hello', that.data.allDis[1])
})
Promise.all语法糖
还有一个很重要的语法,就是Promise里面的reject
也就是用catch捕捉的错误信息
// bad p .then(function(data) { // success }, function(err) { // error }); // good p .then(function(data) { //cb // success }) .catch(function(err) { // error });
catch捕捉promise里的reject()里面的错误信息哦
当p函数里面有错误信息时,catch也可以捕捉到错误
浙公网安备 33010602011771号