扫码关注公众号

前端ES6相关之Promise
09-27
496观看
01

Promise 中reject 和 catch 处理上有什么区别?

reject是用来抛出异常,catch是用来处理异常reject是Promise的方法,而catch是Promise实例的方法reject后

来自:CSS、CSS3-ES6相关(后面会废弃)
02

Promise、Generator、Async有什么区别?

【解析】1、Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它就是为了解决回调函数产生的问题而诞生的。有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。但Promise也有它的缺点:Promise的内部错误使用trycatch捕获不到,只能只用then的第二个回调或catch来捕获2、Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator函数将JavaScript异步编程带入了一个全新的阶段。Async/await其实就是上面Generator的语法糖,async函数其实就相当于funciton*的作用,而await就相当与yield的作用。而在async/await机制中,自动包含了我们上述封装出来的spawn自动执行函数。3、async函数对Generator函数的改进,体现在以下四点:①内置执行器:async函数执行与普通函数一样,不像Generator函数,需要调用next方法,或使用co模块才能真正执行②语意化更清晰:async和await,比起星号和yield,语义更清楚了。async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。③适用性更广:co模块约定,yield命令后面只能是Thunk函数或Promise对象,而async函数的await命令后面,可以是Promise对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即resolved的Promise对象)。④返回值是Promise:async函数的返回值是Promise对象,这比Generator函数的返回值是Iterator对象方便多了。你可以用then方法指定下一步的操作。

来自:CSS、CSS3-ES6相关(后面会废弃)
03

说一下promise基本规则。

【解析】1.首先Promise构造函数会立即执行,而Promise.then()内部的代码在当次事件循环的结尾立即执行(微任务)。2.promise的状态一旦由等待pending变为成功fulfilled或者失败rejected。那么当前promise被标记为完成,后面则不会再次改变该状态。3.resolve函数和reject函数都将当前Promise状态改为完成,并将异步结果,或者错误结果当做参数返回。4.Promise.resolve(value)返回一个状态由给定value决定的Promise对象。如果该值是thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定;否则的话(该value为空,基本类型或者不带then方法的对象),返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法。通常而言,如果你不知道一个值是否是Promise对象,使用Promise.resolve(value)来返回一个Promise对象,这样就能将该value以Promise对象形式使用。5.Promise.all(iterable)/Promise.race(iterable)简单理解,这2个函数,是将接收到的promise列表的结果返回,区别是,all是等待所有的promise都触发成功了,才会返回,而arce有一个成功了就会返回结果。其中任何一个promise执行失败了,都会直接返回失败的结果。6.promise对象的构造函数只会调用一次,then方法和catch方法都能多次调用,但一旦有了确定的结果,再次调用就会直接返回结果。

来自:CSS、CSS3-ES6相关(后面会废弃)
04

promise有几种状态,什么时候会进入catch?

【解析】三个状态:pending、fulfilled、reject两个过程:padding->fulfilled、padding->rejected当pending为rejectd时,会进入catch 

来自:CSS、CSS3-ES6相关(后面会废弃)
05

我们之前遇到的哪些东西本身就是一个 promise 对象?

【解析】jq的ajax请求本身就是一个promise对象所以可以直接用.thenaxios也是一个promise对象原生的ajax以及小程序的wx.request请求都不是promise对象不能用.then的写法,如果想用链式写法,就要自己封装一个promise。

来自:CSS、CSS3-ES6相关(后面会废弃)
课程
专栏
js语言和框架-CSS、CSS3-ES6相关(后面会废弃)
2专栏
1课程
5 试题
热门专题