# es6 Promise是什么?
1. Promise 是一个构造函数 自带三个方法 all、resolve、reject,原型上(prototype)有then、catch等的几个常用的方法。
``` javascript
var getUserInfo=function(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
let a={
user:"jevons"
}
if((typeof a)=="object"){
resolve(a)
}else{
reject("error!")
}
},3000)
})
```
2. getUserInfo函数中return了一个Promise构造函数,其中传入两个参数(resolve,reject),分别表示异步执行成功后的回调函数及异步执行失败的回调函数,
在上面函数中,我们执行了一个异步操作setTimeout,3秒后执行判断 如果是对象回调resolve,不是回调reject。
```javascript
getUserInfo().then((user)=>{
console.log(user)//a={user:'jevons'}
}).catch((error)=>{
console.log(error)
})
```
3. 我们可以使用then方法进行成功后的回调,catch处理失败后的回调。那么这样写的意义在哪里? 假设我们定义了
一个getUserInfo的异步请求方法,我们需要异步请求结束后再进行其它操作?我们的常规想法是在异步请求里面在执行其它的操作不就行了,那么问题来了,
有多层回调该怎么办?Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作。
```javascript
var getUserInfo = function() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let a = {
user: "jevons1"
}
if ((typeof a) == "object") {
resolve(a)
} else {
reject("error1")
}
}, 3000)
})
}
var getUserInfo2 = function() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let a = {
user: "jevons2"
}
if ((typeof a) == "object") {
resolve(a)
} else {
reject("error2")
}
}, 3000)
})
}
getUserInfo().then((user) => {
console.log(user)//a = {
user: "jevons1"
} 3秒后
return getUserInfo2();
}).catch((error) => {
console.log(error)
}).then((user) => {
console.log(user)//a = {
user: "jevons2"
} 6秒后
}).catch((error) => {
console.log(error)
})
```
4. 当然你可以直接返回数据
```javascript
getUserInfo().then((user) => {
console.log(user)//a = {
user: "jevons1"
} 3秒后
return getUserInfo2();
}).catch((error) => {
console.log(error)
}).then((user) => {
console.log(user)//a = {
user: "jevons2"
} 6秒后
return "我是直接返回的";
}).catch((error) => {
console.log(error)
}).then((user)=>{
console.log(user) //我是直接返回的
})
```
5. Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。
```javascript
Promise
.all([getUserInfo1(),getUserInfo2()])
.then(function(results){
console.log(results);
})
```