看著別人的文章水醋,做了個(gè)筆記
回掉函數(shù)其實(shí)就是一個(gè)參數(shù)管削,將這個(gè)函數(shù)作為一個(gè)參數(shù)傳遞到另一個(gè)函數(shù)里面,當(dāng)那個(gè)函數(shù)執(zhí)行完畢之后罗心,再執(zhí)行傳遞進(jìn)去的這個(gè)函數(shù)里伯,這個(gè)過程叫回掉。
主函數(shù)的事先干完渤闷,回頭再調(diào)用傳進(jìn)來的那個(gè)函數(shù)
例子:你送你女朋友回家疾瓮,,你肯定會(huì)說:“到家了給我發(fā)條信息飒箭±堑纾”
然后你女朋友回家以后還真給你發(fā)了條信息蜒灰。其實(shí)這就是一個(gè)回調(diào)的過程。你留了個(gè)參數(shù)函數(shù)(到家了給我發(fā)條信息)給你女朋友肩碟,然后你女朋友回家强窖,回家的動(dòng)作是主函數(shù)。她必須先回到家以后削祈,主函數(shù)執(zhí)行完了翅溺,再執(zhí)行傳進(jìn)去的函數(shù),然后你就收到一條信息了髓抑。
//主函數(shù),回掉函數(shù)做參數(shù)
function main( callback ){
callback();
console.log('我是主函數(shù)')咙崎;
}
//定義回掉函數(shù)
funcation test(){
setTimeout(()=>{
console.log('我是回掉函數(shù)'); //模仿回掉函數(shù)里面做一些事件處理
},3000)
}
//調(diào)用主函數(shù)吨拍,將函數(shù)test()傳進(jìn)去
main(test);
//輸出結(jié)果
我是主函數(shù)
我是回調(diào)函數(shù)
定義主函數(shù)的時(shí)候褪猛,我們讓代碼先去執(zhí)行callback()回調(diào)函數(shù),但輸出結(jié)果卻是后輸出回調(diào)函數(shù)的內(nèi)容密末。這就說明了主函數(shù)不用等待回調(diào)函數(shù)執(zhí)行完握爷,可以接著執(zhí)行自己的代碼。所以一般回調(diào)函數(shù)都用在耗時(shí)操作上面
promise 是一個(gè)構(gòu)造函數(shù)严里,眼熟的方法有all,reject,resolve新啼,原型上有then,catch等同樣眼熟的方法
var pro = new Promise((resolve,reject)=>{
//做這里做一些一步操作
setTimeout(()=>{
console.log(“執(zhí)行完成”);
resolve(true);
},1000)
})
Promise的構(gòu)造函數(shù)接受一個(gè)參數(shù),是函數(shù),并且傳入兩個(gè)參數(shù):resolve,reject刹碾,分別表示異步操作成功后的回調(diào)和異步操作執(zhí)行失敗的回調(diào)
上面我只是new了一個(gè)對(duì)象燥撞,并沒有調(diào)用它,我們傳進(jìn)去的函數(shù)就已經(jīng)執(zhí)行了迷帜,這是需要注意的一個(gè)細(xì)節(jié)物舒。所以我們用Promise的時(shí)候一般是包在一個(gè)函數(shù)中,在需要的時(shí)候去運(yùn)行這個(gè)函數(shù)戏锹,如:
function runAnsy(){
return new Promise(()=>{
setTimeout(()=>{
console.log(‘執(zhí)行完成’);
resolve(true);
},1000);
});
runAsync();
}
Promise對(duì)象上有then冠胯、catch方法,這就是強(qiáng)大之處了
runAsync().then((data)=>{
if(data){
console.log(data)
}
})
ionic3 里面的一個(gè)小小例子
//邀請(qǐng)記錄
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("邀請(qǐng)記錄", 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這篇文章寫的很詳細(xì)。