看着别人的文章,做了个笔记
回掉函数其实就是一个参数,将这个函数作为一个参数传递到另一个函数里面,当那个函数执行完毕之后,再执行传递进去的这个函数,这个过程叫回掉。
主函数的事先干完,回头再调用传进来的那个函数
例子:你送你女朋友回家,,你肯定会说:“到家了给我发条信息?!?br>
然后你女朋友回家以后还真给你发了条信息。其实这就是一个回调的过程。你留了个参数函数(到家了给我发条信息)给你女朋友,然后你女朋友回家,回家的动作是主函数。她必须先回到家以后,主函数执行完了,再执行传进去的函数,然后你就收到一条信息了。
//主函数,回掉函数做参数
function main( callback ){
callback();
console.log('我是主函数');
}
//定义回掉函数
funcation test(){
setTimeout(()=>{
console.log('我是回掉函数'); //模仿回掉函数里面做一些事件处理
},3000)
}
//调用主函数,将函数test()传进去
main(test);
//输出结果
我是主函数
我是回调函数
定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。所以一般回调函数都用在耗时操作上面
promise 是一个构造函数,眼熟的方法有all,reject,resolve,原型上有then,catch等同样眼熟的方法
var pro = new Promise((resolve,reject)=>{
//做这里做一些一步操作
setTimeout(()=>{
console.log(“执行完成”);
resolve(true);
},1000)
})
Promise的构造函数接受一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作成功后的回调和异步操作执行失败的回调
上面我只是new了一个对象,并没有调用它,我们传进去的函数就已经执行了,这是需要注意的一个细节。所以我们用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数,如:
function runAnsy(){
return new Promise(()=>{
setTimeout(()=>{
console.log(‘执行完成’);
resolve(true);
},1000);
});
runAsync();
}
Promise对象上有then、catch方法,这就是强大之处了
runAsync().then((data)=>{
if(data){
console.log(data)
}
})
ionic3 里面的一个小小例子
//邀请记录
myInvite() {
return new Promise((resolve) => {
this.httpServe.get('invite/myInvite', {
pageNo: this.pageNo + 1,
pageSize: 10
}).then(res => {
if (res.success) {
if (this.pageNo == 0) {
this.list = res.dataWrapper.result.resultList;
} else {
this.list = this.list.concat(res.dataWrapper.orders.resultList);
}
this.has_next = res.dataWrapper.result.hasNext;
resolve(true);
} else {
resolve(false);
}
// console.log("邀请记录", res);
})
})
}
//下拉刷新
doRefresh(refresher) {
this.currentTime = new Date();
this.pageNo = 0;
if (this.pet == 'invite') {
this.myInvite().then((res) => {
if (res) {
refresher.complete();
}
}).catch(() => {
refresher.complete();
})
} else if (this.pet == 'income') {
this.myRevenueRecord().then((res) => {
if (res) {
refresher.complete();
}else{
refresher.complete();
}
}).catch(() => {
refresher.complete();
})
}
}
Promiss这篇文章写的很详细。