基本API
1. Promise.resolve()
2. Promise.reject()
3. Promise.prototype.then()
4. Promise.prototype.catch()
5. Promise.all()
6. Promise.race()
介绍
Promise的构造函数接受一个参数,是函数,并且传入两个参数,resolve是将Promise的状态置为fullfiled,reject是将Promise状态置为rejected。
```
var promise = new Promise(reslove,reject){
if(...){
reslove(data)
}else{
reject(errorMsg)
}
}
```
then和catch
then可以实现Promise的连续调用,catch作用相当与then方法的第二个参数,同时它能捕获异常并保证程序继续执行。
````
promise.then(function(response){
//...
},function(reason,errorMsg){
//...
})
.catch(function(reason){
//...
})
````
all和race
all方法为所有的Promise执行完成之后的回掉,接收一个数组,并在resolve中返回一个数组。
race用法同all,race为竞速执行,只要有一个,以下为api的使用方法和简单的原理实现
```
var promiseAll = new Promise()
promiseALl.all([promise1,promise2,promise3])
.then(function(results){
//...
})
promiseAll.race([]promise1,promise2,promise3)
.then(function(results){
//...
})
```
实现原理:
```
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);
}
});
}
```