Promise是ES6新增的對(duì)象甩牺,它可以獲取異步操作的信息,是異步編程的一種解決方案隘世。首先忘苛,這里先簡(jiǎn)單的解釋一下什么是異步編程。任何是程序執(zhí)行都可以分為同步和異步缔莲,同步是指每個(gè)程序的子程序或者說(shuō)代碼塊依次執(zhí)行哥纫,就像現(xiàn)實(shí)生活中的排隊(duì)一樣,前面的沒(méi)執(zhí)行完痴奏,后面的就執(zhí)行不了蛀骇,造成阻塞;而異步剛好相反读拆,前面的代碼不影響后面的執(zhí)行松靡,也可能后面的執(zhí)行完了,前面還在執(zhí)行建椰。
Promise狀態(tài)
Promise 異步操作有三種狀態(tài):pending(進(jìn)行中)、fulfilled(已成功)和 rejected(已失數郝怼)棉姐。除了異步操作的結(jié)果,任何其他操作都無(wú)法改變這個(gè)狀態(tài)啦逆。
new Promise(function(resolve,reject){
resolve('success');
resolve('success2');
}).then(function(value){
console.log(value);//success
});
Promise 對(duì)象只有:從 pending 變?yōu)?fulfilled 和從 pending 變?yōu)?rejected 的狀態(tài)改變伞矩。只要處于 fulfilled 和 rejected ,狀態(tài)就不會(huì)再變了即 resolved(已定型)夏志。
new Promise(function(resolve,reject){
resolve('success');
reject('reject');
}).then(function(value){
console.log(value);//success
});
無(wú)法取消 Promise 乃坤,一旦新建它就會(huì)立即執(zhí)行,無(wú)法中途取消。如果不設(shè)置回調(diào)函數(shù)湿诊,Promise 內(nèi)部拋出的錯(cuò)誤狱杰,不會(huì)反應(yīng)到外部。當(dāng)處于 pending 狀態(tài)時(shí)厅须,無(wú)法得知目前進(jìn)展到哪一個(gè)階段(剛剛開(kāi)始還是即將完成)仿畸。
then方法
then 方法接收兩個(gè)函數(shù)作為參數(shù),第一個(gè)參數(shù)是 Promise 執(zhí)行成功時(shí)的回調(diào)朗和,第二個(gè)參數(shù)是 Promise 執(zhí)行失敗時(shí)的回調(diào)错沽,兩個(gè)函數(shù)只會(huì)有一個(gè)被調(diào)用。
new Promise(function(resolve,reject){
resolve('success');
}).then(function(value){
console.log(value);//success
},function(error){
console.log(error);
});
then 方法將返回一個(gè) resolved 或 rejected 狀態(tài)的 Promise 對(duì)象用于鏈?zhǔn)秸{(diào)用眶拉,且 Promise 對(duì)象的值就是這個(gè)返回值千埃。
new Promise(function(resolve,reject){
resolve('success');
}).then(function(value){
console.log(value);//success
return "success2";
}).then(function(value){
console.log(value);//success2
}).then(function(value){
console.log(value);//undefined
})
通過(guò)
.then
形式添加的回調(diào)函數(shù),不論什么時(shí)候忆植,都會(huì)被調(diào)用放可。