因為業務的關係,網頁和底層的互動很多並且很複雜,一般會巢狀好幾層,原始的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()中取到的result的值為返回值的json_obj.body欄位所對應的值,catch()中取到的result的值為返回值中json_obj.head欄位所對應的值..then(function (result) )
.catch(function (trsult) )
多個promise有先後執行順序的巢狀:
getnetworkinfopromise(route)只有當第乙個ajax返回時,即進入到第乙個then中時才會呼叫第二個ajax,依次進行下去直到最後的then,中間不管那一層的返回值出錯都會進到catch中,這樣在除錯時很容易查詢問題。.then(function (result) )
.then(function (result) )
.then(function (result) )
.catch(function (trsult) )
多個promise共同執行:
var promise1=getnetworkinfopromise(route);利用promise.all方法就可以解決,只有當3個ajax都返回時才會進入到then中,var promise2=getnetworkinfopromise1(route1);
var promise3=getnetworkinfopromise2(route2);
promise.all([promise1,promise2,promise3])
.then(function (result) )
.catch(function (trsult) )
注意:返回的result也是對應結果的陣列。
利用promise的狀態:
promise有一些有用的api:
例如:promise.resolve和promise.reject;
這兩種方法會時promise進入相對應的狀態,
.then(function (result) )如果是resolve就會進入到下乙個then中,如果是reject則會進入到catch中。.then(function (result) )
.catch(function (trsult) )
以上只是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...