一、前言
在正式学习promise之前,建议先了解一下回调地狱的概念
回调函数中再传入一个函数,形成了回调函数的嵌套,这种情况叫做回调地狱,举个例子:
由于他们都是异步,只有采用嵌套的形式才能确保他们按照顺序执行,最终输入结果为1, 2,3.
// 回调地狱
setTimeout(function(){
console.log('1');
setTimeout(function(){
console.log('2');
setTimeout(function(){
console.log('3');
},2000)
},2000)
},2000)
回调地狱代码存在一下几个缺点:
1:代码可复用性差
2:可阅读性差
3:可维护性(迭代性差),嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身
二、promise
1、概念
Promise是异步编程的一种解决方案,从语法上讲,Promise是一个对象,它可以获取异步操作的消息。
2、作用
Promise的出现主要是解决地狱回调的问题,比如你需要结果需要请求很多个接口,这些接口的参数需要另外那个的接口返回的数据作为依赖,这样就需要我们一层嵌套一层,但是有了Promise 我们就无需嵌套,可以将嵌套结构,通过resolve和reject的调用,执行promise对象的then和catch方法,从而不再嵌套。
3、基本应用
几种promise的API
-
Promise.resolve() 调用resolve方法时,Promise的状态就变成fulfilled
-
Promise.reject() 调用reject方法后,Promise状态变为rejected
-
Promise.prototype.then() 得到异步执行任务的正确结果
-
Promise.prototype.catch() 获取异常信息
-
Promise.all() 并发处理多个异步任务,所有任务都执行完成才能得到结果
-
Promise.all([p1,p2,p3])
(1)p1、p2、p3的状态都变成fulfilled,p的状态才变成fulfilled,p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)p1、p2、p3之中有一个被rejected,p的状态变成rejected,第一个被reject的实例的返回值,传递给p的回调函数。
-
Promise.race() 并发处理多个异步任务,只要有一个任务完成就得到结果