promise是什么?
1、主要用于異步計(jì)算
2、可以將異步操作隊(duì)列化,按照期望的順序執(zhí)行,返回符合預(yù)期的結(jié)果
3、可以在對(duì)象之間傳遞和操作promise,幫助我們處理隊(duì)列
為什么會(huì)有promise?
為了避免界面凍結(jié)(任務(wù))
同步:假設(shè)你去了一家飯店,找個(gè)位置,叫來(lái)服務(wù)員,這個(gè)時(shí)候服務(wù)員對(duì)你說(shuō),對(duì)不起我是“同步”服務(wù)員,我要服務(wù)完這張桌子才能招呼你。那桌客人明明已經(jīng)吃上了,你只是想要個(gè)菜單,這么小的動(dòng)作,服務(wù)員卻要你等到別人的一個(gè)大動(dòng)作完成之后,才能再來(lái)招呼你,這個(gè)便是同步的問(wèn)題:也就是“順序交付的工作1234,必須按照1234的順序完成”。
異步:則是將耗時(shí)很長(zhǎng)的A交付的工作交給系統(tǒng)之后,就去繼續(xù)做B交付的工作,。等到系統(tǒng)完成了前面的工作之后,再通過(guò)回調(diào)或者事件,繼續(xù)做A剩下的工作。
AB工作的完成順序,和交付他們的時(shí)間順序無(wú)關(guān),所以叫“異步”。
1.promise簡(jiǎn)單用法
function2(){
// 你的邏輯代碼
return Promise.resolve(/* 這里是需要返回的數(shù)據(jù)*/)
}
function3(){
// 你的邏輯代碼
return Promise.resolve(/* 這里是需要返回的數(shù)據(jù)*/)
}
// 調(diào)用
function1(){
this.function2().then(val => {
this.function3();
});
}
2.promise高階用法
init1(){
return new Promise((resolve, reject) => {
let data={
dateStr:this.time
};
api.get('url', null).then( res => {
//自己的操作
resolve()
}).catch(err => {
reject()
});
});
};
init2(){
return new Promise((resolve, reject) => {
let data={
dateStr:this.time
};
api.get('url', null).then( res => {
//自己的操作
resolve()
}).catch(err => {
reject()
});
});
};
//調(diào)用
Promise.all([this.init1(),this.init2()]).then(() => {
//兩個(gè)都調(diào)成功以后執(zhí)行的操作
//主要是loading問(wèn)題
}).catch(err => {
// 拋出錯(cuò)誤信息
});