Promise是异步执行的一种方法,有如下API:
Promise.resolve()
Promise.reject()
Promise.prototype.then()
Promise.prototype.catch()
Promise.all() // 所有的都有完成,相当于 且
Promise.race() // 完成一个即可,相当于 或
- Promise.resolve()的作用将现有对象转为Promise对象resolvedl;Promise.resolve('test')==new Promise(resolve=>resolve('test'))
- Promise.reject()也是返回一个Promise对象,状态为rejected;
- then() 成功回调
- catch():发生错误的回调函数。
- Promise.all()适合用于所有的结果都完成了才去执行then()成功的操作
一般用法:
let promise = new Promise((resolve,reject)=>{
// 模拟执行请求接口
getData().then((res)=>{
// 标记成功后给定某个数据:res
resolve(res)
}).catch(e=>{
// 标记失败后给定某个数据
reject('发生错误')
})
})
promise.then(res=>{
console.log(res)
}).catch(e=>{
console.log(e)
})
假如有一个需求,需要同时请求三个接口,三个接口全都返回数据后再做处理,则可以使用Promise.all()这个api。举个栗子:
let p1 =new Promise((resolve,reject)=>{
// 模拟请求接口1
getData1().then((res)=>{
// 标记成功后给定某个数据:res
resolve(res)
}).catch(e=>{
// 标记失败后给定某个数据
reject('发生错误')
})
})
let p2 = new Promise((resolve,reject)=>{
// 模拟请求接口2
getData2().then((res)=>{
// 标记成功后给定某个数据:res
resolve(res)
}).catch(e=>{
// 标记失败后给定某个数据
reject('发生错误')
})
})
let p3 = new Promise((resolve,reject)=>{
// 模拟请求接口3
getData3().then((res)=>{
// 标记成功后给定某个数据:res
resolve(res)
}).catch(e=>{
// 标记失败后给定某个数据
reject('发生错误')
})
})
// results的结果是一个数组,分别代表三个接口的数据
Promise.all([p1, p2, p3]).then((results)=>{
console.log('success:'+results)
}).catch(e=>{
console.log("error")
console.log(e)
})