promise
Promise是什么柠偶?
Promise用來表示延遲操作也就是異步操作的結(jié)果
Promise 對象代表了未來將要發(fā)生的事件,用來傳遞異步操作的消息
Promise主要用于異步計算
Promise 創(chuàng)建 Promise 創(chuàng)建
var promise=new Promise(function(resolve,reject){
setTimeout(function(){
console.log('執(zhí)行完成Promise');
resolve('要返回的數(shù)據(jù)可以任何數(shù)據(jù)例如接口返回數(shù)據(jù)');
}, 2000);
})
Promose的三個狀態(tài):
pending 是 初始狀態(tài)
fulfilled 是 操作成功的狀態(tài)
rejected 是 操作失敗的狀態(tài)
.then()
1睬关、接收兩個函數(shù)作為參數(shù)诱担,分別代表fulfilled(成功)和rejected(失敗)
2电爹、.then()返回一個新的Promise實例蔫仙,所以它可以鏈?zhǔn)秸{(diào)用
(1)如果then方法中回調(diào)函數(shù)返回一個值那么then返回的Promise將會成為Resolved狀態(tài),并且將返回的值
作為Resolved狀態(tài)的回調(diào)函數(shù)的參數(shù)值丐箩。
var p = new Promise(function (resolve, reject) {
resolve('fun');
});
p.then(function () {
return 1; // 返回一個值
}).then(function (value) {
console.log(value);
}); // 1
3摇邦、當(dāng)前面的Promise狀態(tài)改變時,.then()根據(jù)其最終狀態(tài)屎勘,選擇特定的狀態(tài)響應(yīng)函數(shù)執(zhí)行
4施籍、狀態(tài)響應(yīng)函數(shù)可以返回新的promise,或其他值概漱,不返回值也可以我們可以認(rèn)為它返回了一個null丑慎;
5、如果返回新的promise瓤摧,那么下一級.then()會在新的promise狀態(tài)改變之后執(zhí)行
6竿裂、如果返回其他任何值,則會立即執(zhí)行下一級.then()
.then的情況
1姻灶、因為.then()返回的還是Promise實例
2铛绰、會等里面的then()執(zhí)行完,再執(zhí)行外面的
promise的基本語法
var a = 2;
var p = new Promise(function (resolve, reject) {
if (a == 1) {
resolve(1)
} else {
reject(2)
}
});
p.then(
function (res1) {
console.log(res1) // 成功resolve promise 的第一個then中的第一個函數(shù)來處理
},
//可以寫倆個函數(shù)
// function(res){
// console.log(res2);//可以捕獲reject 2
// }
).catch(function (error) {//必須寫
// 捕獲錯誤
if (error) {
console.log(error)
}
}).
then(function (er) {//第二個then是第一個then結(jié)束后的回調(diào)函數(shù)
// 第一個then 處理結(jié)束后的回調(diào)函數(shù)
console.log('處理完成')
})
// 獲得reject 的結(jié)果 使用catch then 也是可以捕獲的产喉,但是會報錯