什么是Promise
- 简单来说,Promise是异步编程的一种解决方案。
为什么会有promise?
先清楚一下什么是异步与同步:
- 同步:假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。
- 异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,。等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。
AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。
使用
Promise:进行异步请求时使用
Promise是一个内部封装的类,new的时候会执行它的构造函数(1.保存一些状态信息 2.执行我们传入的函数)
在执行传入的回调函数时,又会传进两个参数,resolve和reject,二者本身又是一个函数
new Promise((resolve,reject)=>{
//模拟异步请求
setTimeout(() => {
//执行成功时调用resolve
resolve();
//执行失败时调用reject
reject();
}, 3000);
}).then(()=>{
//执行resolve时会来到then
console.log('hello');
}).catch(()=>{
//执行失败会来到catch
console.log('error')
})
在进行异步请求成功或失败时可以进行参数的传递,相当于在进行网络请求时将得到的数据进行进一步处理
new Promise((resolve,reject)=>{
setTimeout(() => {
//执行成功时调用resolve
resolve('执行成功');//resolve中传入的参数对应到then中回调函数中的参数
}, 3000);
}).then((data)=>{
//执行resolve时会来到then
console.log(data);
})