1.同步/异步
同步:必须要等到一件事情完成后才能执行另一件事情
异步:无阻塞高并发,是nodeJS的招牌,要达到无阻塞高并发异步是其基本保障。
举例:查询数据从数据库,PHP第一个任务查询数据,后面有了新任务,那么后面任务会被挂起排队;而nodeJS是第一个任务挂起交给数据库去跑,然后去接待第二个任务交给对应的系统组件去处理挂起,接着去接待第三个任务...那这样子的处理必然要依赖于异步操作。
之前处理异步是通过纯粹的回调函数的形式进行处理,很容易进入到回调地狱中,剥夺了函数return的能力,难以读懂,维护困难,稍有不慎就会踏入回调地狱 - 嵌套层次深,不好维护,
所以promise产生了!
2.什么是promise
promise是一个对象,也是一个构造函数,并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据,便于维护,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法
Promise.all(批量执行):
接收一个数组作为参数,当所有的子Promise都完成,该Promise才完成,返回值是全部值得数组,有任何一个失败,该Promise失败,返回值是第一个失败的子Promise结果,多个异步操作返回的数据哪里去了呢?都在then里面呢,all会把所有异步操作的结果放进一个数组中传给then,在then获取出来(使用场景:一些游戏类的素材比较多的应用,打开网页时,预先加载需要用到的各种资源如图片、flash以及各种静态文件。所有的都加载完后,我们再进行页面的初始化)
Promise.race(谁跑的快,以谁为准执行回调):
接收一个数组作为参数,它有任意一个完成就算完成(使用场景:给某个异步请求设置超时时间,并且在超时后执行相应操作/异步请求一张图片如果5秒之内图片请求成功了,那么进入then方法,执行正常的流程。如果5秒钟图片还未成功返回,则进入catch,报出“图片请求超时”)