本文章完全參考 阮一峰老師的es6-promise衍菱。如果有啥問題可以直接去看原文秽梅!
什么是promise,簡單地來說坡椒,就是一個容器就缆,保存著未來才會結(jié)束的事情(異步操作)
promise是個對象帖渠。
特點:1.對象狀態(tài)不受外界影響。只有異步操作的結(jié)果竭宰,可以決定當(dāng)前是什么狀態(tài)空郊,其他都無法改變。
有三種狀態(tài):pengding (進行中)
切揭、 fulfilled(已成功)
rejected(已失斈酢)
2.一旦狀態(tài)改變,就不會再改變廓旬。任何時候都可以得到這個結(jié)果哼审。
狀態(tài)改變只有兩種可能 => 1.pending > fulfilled(已成功)
2.pending > rejected(已失敗)
狀態(tài)一旦改變成功,則不會改變,一直保持這個結(jié)果棺蛛,成為 resolved(已定型)
。即使添加回調(diào)函數(shù)巩步,也是立即得到這個結(jié)果旁赊。
缺點:1.無法取消,一旦新建則立即執(zhí)行椅野,無法中途取消终畅。2.如果不設(shè)置回調(diào),則內(nèi)部拋出的錯誤竟闪,不會反應(yīng)到外部离福。3.如果處于pending狀態(tài),無法得知進展(剛開始還是即將完成炼蛤?)
開始使用啦~
簡單實用方法:
let getData = function () {
return new Promise(function (resolve, reject) {
$.get(url.imgid, { id: ids }, function (d) {
$.get(url.img, { id: d.data.hdimg[0].id }, function (ds) {
resolve(ds);//=return d
})
})
})
};
getData().then(function (ds) {
console.log(ds);
})