Promise的說明及創(chuàng)建方式

Promise的基本概念

promise屬于new出來的對象,它的存在代表了一個(gè)異步程序的成功或失敗


該對象有三種狀態(tài):

Pending(進(jìn)行中)

Resolved(已完成,又稱 Fulfilled)

Rejected(已失?。?/p>


只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無法改變這個(gè)狀態(tài)。

我們可以使用promise檢測ajax的請求狀態(tài),利用promise的成功狀態(tài)函數(shù),返回ajax請求到的數(shù)據(jù)。


舉個(gè)簡而易懂的例子:

> promise是承諾的意思,那我說如果RNG今天打贏了比賽,三天后我就去吃慶功宴,這樣就產(chǎn)生了兩種可能:

> 1.RNG贏了,我后天去吃慶功宴

> 2.RNG輸了,我還是要乖乖的敲代碼

承諾的正在進(jìn)行時(shí): 三天期間

承諾成功: 三天后,去吃慶功宴了

承諾失?。?三天后,沒有去吃慶功宴


原生js模仿promise的過程:

function fn(success,error){

? ? ? ? console.log("正在進(jìn)行時(shí)....")

? ? ? ? var t1,t2;

? ? ? ? t1 = setTimeout(() => {

? ? ? ? ? ? success();

? ? ? ? ? ? clearTimeout(t2)? //成功時(shí)清除失敗的計(jì)時(shí)器

? ? ? ? }, Math.random()*1000);

? ? ? ? t2 = setTimeout(() => {

? ? ? ? ? ? error()

? ? ? ? ? ? clearTimeout(t1)? //失敗時(shí)清除成功的計(jì)時(shí)器

? ? ? ? }, Math.random()*1000);

? ? }

? ? fn(function(){

? ? ? ? document.body.style.background = "green";

? ? },function(){

? ? ? ? document.body.style.background = "pink";

? ? });


ES6封裝好的promise

封裝好的promise是已經(jīng)做好了我們要手動(dòng)清除計(jì)時(shí)器的功能, 所以不需要再多此一舉了

? ? var p = new Promise(function(success,error){

? ? ? ? setTimeout(() => {

? ? ? ? ? ? success();

? ? ? ? }, Math.random()*1000)

? ? ? ? setTimeout(() => {

? ? ? ? ? ? error();

? ? ? ? }, Math.random()*1000)

? ? });

? ? p.then(function(res){

? ? ? ? console.log("成功")

? ? },function(res){

? ? ? ? console.log("失敗")

? ? })


要更加深入了解promise,就去官方文檔看看吧。

使用 Promise - JavaScript | MDN

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容