Promise筆記
1.promise構造函數(shù)
Promise是一個構造函數(shù),傳參是一個function(resolve诀豁,reject)窄刘,resolve是異步執(zhí)行成功的回調(diào),reject是異步執(zhí)行失敗的回調(diào)舷胜。
//構建promise函數(shù)如下
//例1
var p = new Promise(function(resolve, reject){
//做一些異步操作
setTimeout(function(){
resolve('success');
}, 1000);
});
//例2
function executionFuc(){
var p = new Promise(function(resolve, reject){
//做一些異步操作
setTimeout(function(){
resolve('success');
}, 1000);
return p;
});
}
注意C浼!!以上例子只是new了對象翻伺,卻會直接執(zhí)行材泄。為了避免直接執(zhí)行,如例2所示吨岭,一般將該對象放在一個函數(shù)內(nèi)
2.then跟catch的用法
var p = new Promise(function(resolve, reject){
//做一些異步操作
setTimeout(function(){
resolve('success');
}, 1000);
})
.then(function(data){
console.log('resolved');
console.log(data);
console.log(weisingyi); //weisingyi未定義
})
.catch(function(reason){
console.log('rejected');
console.log(reason);
});
.then用來接收成功后的回調(diào)拉宗,對應resolve;
.then本身能接受兩個參數(shù)辣辫,一個對應成功處理旦事,一個對應失敗處理,在執(zhí)行resolve的回調(diào)時络它,如果代碼出錯族檬,就會卡死不進入失敗處理,所以建議使用.catch
.catch用來接收失敗后的回調(diào)化戳,對應reject单料;
3.all的用法
Promise
.all([promise1(), promise2()])
.then(function(datas){
console.log(datas);
});
all方法傳入數(shù)組參數(shù),作用是多個異步并行執(zhí)行点楼,并且在所有異步操作執(zhí)行完后才執(zhí)行回調(diào)扫尖。返回的datas也將是一個數(shù)組,分別對應多個異步的返回數(shù)據(jù)掠廓。
4.race的用法
Promise
.race([promise1(), promise2()])
.then(function(datas){
console.log(datas);
});
race與all相同换怖,都是多個異步并行執(zhí)行,但是race只返回第一個執(zhí)行完的結果蟀瞧,后續(xù)其余異步將不再返回沉颂。例如用于超時跳出功能。