基本API
1. Promise.resolve()
2. Promise.reject()
3. Promise.prototype.then()
4. Promise.prototype.catch()
5. Promise.all()
6. Promise.race()
介紹
Promise的構(gòu)造函數(shù)接受一個(gè)參數(shù)临谱,是函數(shù)璃俗,并且傳入兩個(gè)參數(shù),resolve是將Promise的狀態(tài)置為fullfiled悉默,reject是將Promise狀態(tài)置為rejected城豁。
```
var promise = new Promise(reslove,reject){
? ? if(...){
? ? ? ? reslove(data)
? ? }else{
? ? ? ? reject(errorMsg)
? ? }
}
```
then和catch
then可以實(shí)現(xiàn)Promise的連續(xù)調(diào)用,catch作用相當(dāng)與then方法的第二個(gè)參數(shù)抄课,同時(shí)它能捕獲異常并保證程序繼續(xù)執(zhí)行唱星。
````
promise.then(function(response){
? ? //...
},function(reason,errorMsg){
? ? //...
})
.catch(function(reason){
? ? //...
})
````
all和race
all方法為所有的Promise執(zhí)行完成之后的回掉,接收一個(gè)數(shù)組雳旅,并在resolve中返回一個(gè)數(shù)組。
race用法同all间聊,race為競速執(zhí)行攒盈,只要有一個(gè),以下為api的使用方法和簡單的原理實(shí)現(xiàn)
```
var promiseAll = new Promise()
promiseALl.all([promise1,promise2,promise3])
.then(function(results){
? ? //...
})
promiseAll.race([]promise1,promise2,promise3)
.then(function(results){
? ? //...
})
```
實(shí)現(xiàn)原理:
```
Promise.all=function(promises){
? ? return? new Promise(function(resolve,reject){
? ? ? ? let? done=gen(promises.length,resolve);
? ? ? ? for(leti=0;i<promises.length;i++){
????????????promises[i].then(function(data){
????????????????done(i,data);
????????????},reject);
????????}
????});
}
Promise.race=function(promises){
????return? new? Promise(function(resolve,reject){
????????for(leti=0;i<promises.length){
????????????promises[i].then(resolve,reject);
????????}
????});
}
```