promise
1. 什么是 promise ?
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
异步回调的问题:
- 之前处理异步是通过纯粹的回调函数的形式进行处理;
- 很容易进入到回调地狱中,剥夺了函数return的能力;
- 问题可以解决,但是难以读懂,维护困难;
- 稍有不慎就会踏入回调地狱 - 嵌套层次深,不好维护;
回调地狱如下:
<script>
// promise —— 一种异步编程的解决方案
function func(cb) {
setTimeout(() => {
cb && cb();
}, 1000)
}
func(() => {
console.log(1);
func(() => {
console.log(2);
func(() => {
console.log(3);
func(() => {
console.log(4);
func(() => {
console.log(5);
});
});
});
});
});
</script>
一般情况我们一次性调用API就可以完成请求。
有些情况需要多次调用服务器API,就会形成一个链式调用,比如为了完成一个功能,我们需要调用API1、API2、API3,依次按照顺序进行调用,这个时候就会出现回调地狱的问题;
promise
- promise是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外);
- 并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据;
- 代码风格,容易理解,便于维护;
- 多个异步等待合并便于解决;
详情:
<script>
//promise
//创建promise对象的实例时,构造函数需要接收一个函数作为参数
//该函数需要接收两个函数作为参数
//resolve 函数
//reject 函数
/*promise状态:
pending 进行中
fullfilled 已成功 resolved 成功 执行 resolve函数
rejected 已失败 rejected 失败 执行 reject函数
*/
let p=new Promise