promise是什么
Promise 是异步编程的一种解决方案:从语法上讲,Promise是一个对象,从它可以获取异步操作的消息,Promise有三种状态:pending(等待态),fulfilled(成功态),rejected(失败态),状态一旦改变,就不会再变
我们平常些代码
一般来说我们会碰到的回调嵌套都不会很多,一般就一到两级,但是某些情况下,回调嵌套很多时,代码就会非常繁琐,会给我们的编程带来很多的麻烦,这种情况俗称——回调地狱。
这时候我们的Promise就出场了
promise是用来解决两个问题的
1. 回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象
2. Promise可以解决异步的问题,本身不能说Promise是异步的
promise的用法
Promise是一个构造函数,自己身上有all、reject、resolve这几个眼熟的方法,原型上有then、catch等同样很眼熟的方法
下面new一个Promise
Promise的构造函数接收一个参数:函数,并且这个函数需要传入两个参数,而且这两个参数也是函数
· resolve :异步操作执行成功后的回调函数
· reject:异步操作执行失败后的回调函数
then 链式操作的用法
从表面上看,Promise只是能够简化层层回调的写法,而实质上,Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够 及时调用,它比传递callback函数要简单、灵活的多。所以使用Promise的正确场景是这样的
resolve,reject的用法
Promise的状态如果成功,我们就可以在then中捕捉到,然后执行“成功”的回调,如果状态失败,我们就执行“失败”的回调
then中传了两个参数,then方法可以接受两个参数,第一个对应resolve的回调,第二个对应reject的回调。所以我们能够分别拿到他们传过来的数据。多次运行这段代码,你会随机得到两种结果
catch的用法
我们知道Promise对象除了then方法,还有一个catch方法,它是做什么用的呢?其实它和then的第二个参数一样,用来指定reject的回调
all的用法
Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。all接收一个数组参数,里面的值最终都算返回Promise对象
需要特别注意的是,Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即Promise1的结果在前,即便Promise1的结果获取的比Promise2要晚。这带来了一个绝大的好处:在前端开发请求数据的过程中,偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题
race的用法
Promise.race([Promise1, Promise2, Promise3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态