-
Promise
代表一個(gè)異步操作。
- 創(chuàng)建一個(gè)
Promise
實(shí)例
const promise = new Promise((resolve,reject) => {
...
if (/*異步操作成功*/) {
resolve(value);
} else {
reject(error)
}
})
promise.then((value) => {
...
}).catch((error) => {
...
})
-
Promise
構(gòu)造函數(shù)接收一個(gè)參數(shù)流济,該參數(shù)是一個(gè)異步執(zhí)行的函數(shù)增拥。這個(gè)函數(shù)有兩個(gè)參數(shù)resolve
和reject
扔水。
- 當(dāng)異步操作執(zhí)行成功時(shí)將會(huì)調(diào)用
resolve
屯阀,resolve
的作用是將promise
對(duì)象的狀態(tài)由“未完成”變?yōu)椤俺晒Α毙蚧拢藭r(shí)將會(huì)調(diào)用resolved
(成功)狀態(tài)的回調(diào)函數(shù)婶熬,該回調(diào)函數(shù)是then
方法的第一個(gè)參數(shù)两疚。該回調(diào)函數(shù)的參數(shù)值可通過設(shè)置resolve
函數(shù)的參數(shù)傳遞過來(lái)。
- 當(dāng)異步操作執(zhí)行失敗時(shí)將會(huì)調(diào)用
reject
弯囊,reject
的作用是將promise對(duì)象的狀態(tài)由“未完成”變?yōu)椤笆 碧瞪冢藭r(shí)將會(huì)調(diào)用rejected
(失敗)狀態(tài)的回調(diào)函數(shù)常挚,該回調(diào)函數(shù)是then
方法的第二個(gè)參數(shù)作谭。但一般不會(huì)使用then
的第二個(gè)參數(shù),而是使用catch
方法奄毡。因?yàn)?code>catch方法不僅可以捕獲到一開始promise
對(duì)象中異步操作失敗的錯(cuò)誤折欠,還能捕獲到前面then
方法中的錯(cuò)誤。
- 使用
Promise
封裝簡(jiǎn)化版axios
中get
方法:
const myAxios = {
get:function(url) {
return new Promise((resolve,reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET',url,true);
xhr.onreadystatechange = function() {
if (this.readyState !== 4) {
return;
}
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error(this.statusText));
}
}
xhr.send();
})
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者