那什么是回调地狱?什么是回调函数?
回调地狱: 通俗来说就是将函数作为参数,层层嵌套。回调函数:一个函数作为参数需要依赖另一个函数执行调用。嵌套到底有什么问题?来看下面的代码,这就是一个函数嵌套,我们经常这样写,代码的缩进有种金字塔的视觉,容易成读代码的有点不方便之外就是看起来不那么美观, 再来看一个面试中常见的顺序执行问题,打印的结果是什么?(自己执行下试试) 再来看一个简洁的回调: 这部分代码主要完成了什么?
对于回调函数handePhoto声明并定义函数downloadPhoto在下载完图片后,调用回调函数handePhoto进行处理最后输出Download started!如果异步的嵌套都是这样干净整洁,那“回调地狱”给程序猿带来的伤害马上就会减少很多。
promise函数(三个状态、两个参数、then链式调用)
允许你以一种同步的方式编写异步代码,构造一个Promise实例需要给Promise构造函数传入一个函数,该函数有两个形参,分别是resolve和reject;该实例有三个状态:pending(等待状态)、fulfilled(返回满足条件的状态)、rejected(延时对象不满足条件)状态 。pending–>fulfilled状态执行resolve();pending–>rejected状态执行rejected();Promise上还有then方法,then 方法就是用来指定Promise 对象的状态改变时确定执行的操作,resolve 时执行then的第一个函数,reject时执行then的第二个函数;promise函数基本语法 promise函数then的语法
then()里有两个回调函数,第一个是成功后(resolve返回)的回调function(num) {}, 另一个是失败后(reject返回)的回调function(err) {},异常发生时可以放在第二个回调里面处理。也可以在then后面加.catch,在这里面进行异常处理promise的其他函数(.all、.race)
Promise.all:可以将多个实例组装成一个新的实例,成功的时候返回一个成功数组,失败的时候则返回最先被reject失败状态的值 Promise.race:可以理解为赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪个获取的快,就返回哪个结果,不管结果本身是成功还是失败