Promise使用的心得

2021-08-18 02:03:34 字數 2499 閱讀 3554

因為業務的關係,網頁和底層的互動很多並且很複雜,一般會巢狀好幾層,原始的ajax或者jquery的ajax寫起來巢狀太長,找問題時不容易找到切入點,因此使用es6的promise來解決ajax的多層巢狀問題。

promise是抽象非同步處理物件以及對其進行各種操作的元件。

promise是把類似的非同步處理物件和處理規則進行規範化, 並按照採用統一的介面來編寫,而採取規定方法之外的寫法都會出錯。

例如:var

promise = getasyncpromise(

"filea.txt"

);promise.then(

function

(result)).

catch

(function

(error));

promise有3個狀態:

"has-resolution" - fulfilled

resolve(成功)時。此時會呼叫 onfulfilled

"has-rejection" - rejected

reject(失敗)時。此時會呼叫 onrejected

"unresolved" - pending

既不是resolve也不是reject的狀態。也就是promise物件剛被建立後的初始化狀態等

1. new promise(fn) 返回乙個promise物件

2. 在 fn 中指定非同步等處理

• 處理結果正常的話,呼叫 resolve(處理結果值)

• 處理結果錯誤的話,呼叫 reject(error物件)

下面會舉乙個例項:

function

geturl(url)

else

};req.onerror =

function

() ;

req.send();

});}

// 執行示例

var

url =

"";geturl(url).then(

function

onfulfilled(value)).

catch

(function

onrejected(error));

getnetworkinfopromise: function (objectdata) 

resolve(json_obj.body);

});});

return prs;

},

let route=;

getnetworkinfopromise(route)

getnetworkinfopromise(route)

.then(function (result) )

.catch(function (trsult) )

then()中取到的result的值為返回值的json_obj.body欄位所對應的值,catch()中取到的result的值為返回值中json_obj.head欄位所對應的值.

多個promise有先後執行順序的巢狀:

getnetworkinfopromise(route)

.then(function (result) )

.then(function (result) )

.then(function (result) )

.catch(function (trsult) )

只有當第乙個ajax返回時,即進入到第乙個then中時才會呼叫第二個ajax,依次進行下去直到最後的then,中間不管那一層的返回值出錯都會進到catch中,這樣在除錯時很容易查詢問題。

多個promise共同執行:

var promise1=getnetworkinfopromise(route);

var promise2=getnetworkinfopromise1(route1);

var promise3=getnetworkinfopromise2(route2);

promise.all([promise1,promise2,promise3])

.then(function (result) )

.catch(function (trsult) )

利用promise.all方法就可以解決,只有當3個ajax都返回時才會進入到then中,

注意:返回的result也是對應結果的陣列。

利用promise的狀態:

promise有一些有用的api:

例如:promise.resolve和promise.reject;

這兩種方法會時promise進入相對應的狀態,

.then(function (result) )

.then(function (result) )

.catch(function (trsult) )

如果是resolve就會進入到下乙個then中,如果是reject則會進入到catch中。

以上只是promise簡單的使用方法,其他的可以看看文件。

promise的基本使用

promise 主要是解決非同步深層的巢狀問題 promise的基本使用 var p newpromise function resolve,reject sele return p 補充 在promise中,我們通常用 then來得到非同步任務正確的值,用.catch來得到非同步任務錯誤的結果 現...

promise物件的使用

什麼是promise promise 是非同步程式設計的一種解決方案,比傳統的解決方案 函式和事件 更合理和更強大。地獄 promise物件的兩大特點 1.物件不受外界的影響 2.一旦狀態發生改變,就不會再發生改變,任何時候都能得到這個結果。getsiginmanageheader function...

promise的簡單使用

var p new promise function resolve,reject 3000 settimeout function 2000 resolve 123 reject 123 ajax error reject var p2 p.then data res p2.then functi...