promise是什么?
- 破軟米斯
- 意思:承諾,發(fā)誓
解決異步的傳統(tǒng)方法是回調函數(shù)
promise()是一個構造函數(shù),使用new Promise()返回一個promise實例對象
- promise是ES6引入的一個內置對象
- Promise用途:用來處理異步操作狭郑,解決之前回調地獄的問題。
定義:Promise表示一個異步操作的結果
promise設計意圖:為了解決異步操作的回調地獄
語法:
<new Promise(executor)
new Promise((resolve,reject)=>{
resolve:解決
reject:拒絕
})
executor(執(zhí)行器函數(shù))
- 是一個執(zhí)行器函數(shù)
- 當new Promise(executor)實例對象時汇在,創(chuàng)建了一個promise實例對象翰萨,執(zhí)行器函數(shù)自動被調用。
- 在執(zhí)行器函數(shù)內部:存儲著一個異步操作糕殉。(意思:需要你自定義一個異步操作)
- Resolve()讀音(蕊肉次)當異步操作成功時執(zhí)行
- Reject()當異步失敗操作時執(zhí)行
返回值:返回一個promise的對象亩鬼。有兩個屬性:
state:Promise對象(狀態(tài))
pending:默認殖告,表示異步操作的結果懸而未決。說明resolve或reject未調用雳锋。
Fulfilled:異步操作成功黄绩。當resilve()被調用時。
rejected:異步操作失敗玷过。當rejected()函數(shù)被調用時reason:Promise對象(結果)讀音:(蕊曾)
undefined:默認
value:當resolve(value)被調用時 輸出異步操作成功的結果爽丹。
Errir:當reject(error)被調用時,輸出異步操作失敗的錯誤信息辛蚊。
promise怎么解決的粤蝎?
思路:通過Promise構造函數(shù)分離異步操作和回調函數(shù)
Promise的具體實現(xiàn)步驟
- 實例化一個promise對象
- 在promise構造函數(shù)的參數(shù)中傳入異步操作
- 在異步操作成功時修改promise狀態(tài)(使用resolve修改)
- 在異步操作失敗時修改promise狀態(tài)(使用reject修改)
- 為promise綁定回調(promise.then())
如何使用回調
1.Promise.prototype.then()
讀音 : 探
定義:
用于為promise對象綁定回調函數(shù)
promise在異步操作的角色,連接異步操作和回調函數(shù)袋马,換言之:
- promise左手是executor執(zhí)行函數(shù)初澎。
- promise右手是then方法的回調函數(shù)
語法:
//基本語法
promise.then(fufilled,rejected)
//擴展語法
promise.then(function(data){},function(err){})
fufilled:異步操作成功時的回調函數(shù)
reject:異步操作失敗時的回調函數(shù)
返回值:
- 默認返回一個沒有狀態(tài)promise
- 如果手動設置了一個值: return data + “hello”,那么這個值作為返回的promise的新值飞蛹。
- 如果手動return了一個promise 谤狡,那么這個promise作為返回值promise。
2.async
關鍵字用于創(chuàng)建一個promise異步函數(shù)
語法:
asyne function fn(){}
實例:
async function getData(){
const p=await new Promise((resove,reject)=>{
let GoogdGoodStudy = true
setInterval(function(){
if(GoogdGoodStudy){
//調用resolve狀態(tài) 2.在調用的同時 傳入異步請求成功卧檐。
resove("成功")
}else{
reject("失敗")
}
},200)
})
//右手操作
console.log(p);//成功
}
getData()
3.await
操作符用于計算一個異步操作的結果
語法:
asyuc fn(){
await new Promise(()=>{})
}
await關鍵字只能在async函數(shù)中使用