扫码关注公众号

前端ES6相关之Promise
08-25
364观看
01

promise解决异步操作的优点?

【解析】1、链式操作减低了编码难度2、代码可读性明显增强

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

promise对象的三种状态?

【解析】1、pending(进行中)2、fulfilled(已成功)3、rejected(已失败)

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

promise对象的特点?

【解析】1、对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态2、一旦状态改变(从pending变为fulfilled和从pending变为rejected),就不会再变,任何时候都可以得到这个结果

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

Promise构造函数的方法?并分别解释其用法

【解析】Promise构造函数存在以下方法:all()、race()、allSettled()、resolve()、reject()、try()all()Promise.all()方法用于将多个Promise实例,包装成一个新的Promise实例constp=Promise.all([p1,p2,p3]);接受一个数组(迭代对象)作为参数,数组成员都应为Promise实例实例p的状态由p1、p2、p3决定,分为两种:只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数注意,如果作为参数的Promise实例,自己定义了catch方法,那么它一旦被rejected,并不会触发Promise.all()的catch方法constp1=newPromise((resolve,reject)=>{resolve('hello');}).then(result=>result).catch(e=>e);constp2=newPromise((resolve,reject)=>{thrownewError('报错了');}).then(result=>result).catch(e=>e);Promise.all([p1,p2]).then(result=>console.log(result)).catch(e=>console.log(e));//["hello",Error:报错了]如果p2没有自己的catch方法,就会调用Promise.all()的catch方法constp1=newPromise((resolve,reject)=>{resolve('hello');}).then(result=>result);constp2=newPromise((resolve,reject)=>{thrownewError('报错了');}).then(result=>result);Promise.all([p1,p2]).then(result=>console.log(result)).catch(e=>console.log(e));//Error:报错了race()Promise.race()方法同样是将多个Promise实例,包装成一个新的Promise实例constp=Promise.race([p1,p2,p3]);只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变率先改变的Promise实例的返回值则传递给p的回调函数constp=Promise.race([fetch('/resource-that-may-take-a-while'),newPromise(function(resolve,reject){setTimeout(()=>reject(newError('requesttimeout')),5000)})]);p.then(console.log).catch(console.error);allSettled()Promise.allSettled()方法接受一组Promise实例作为参数,包装成一个新的Promise实例只有等到所有这些参数实例都返回结果,不管是fulfilled还是rejected,包装实例才会结束constpromises=[fetch('/api-1'),fetch('/api-2'),fetch('/api-3'),];awaitPromise.allSettled(promises);removeLoadingIndicator();resolve()将现有对象转为Promise对象Promise.resolve('foo')//等价于newPromise(resolve=>resolve('foo'))参数可以分成四种情况,分别如下:①参数是一个Promise实例,promise.resolve将不做任何修改、原封不动地返回这个实例②参数是一个thenable对象,promise.resolve会将这个对象转为Promise对象,然后就立即执行thenable对象的then()方法③参数不是具有then()方法的对象,或根本就不是对象,Promise.resolve()会返回一个新的Promise对象,状态为resolved④没有参数时,直接返回一个resolved状态的Promise对象reject()Promise.reject(reason)方法也会返回一个新的Promise实例,该实例的状态为rejectedconstp=Promise.reject('出错了');//等同于constp=newPromise((resolve,reject)=>reject('出错了'))p.then(null,function(s){console.log(s)});//出错了Promise.reject()方法的参数,会原封不动地变成后续方法的参数Promise.reject('出错了').catch(e=>{console.log(e==='出错了')})//true

来自:CSS、CSS3-ES6相关(后面会废弃)
课程
专栏
ES6相关信息
知乎
ES6
【校招VIP】Es6 赋值方法
对象赋值
csdn
js语言和框架-CSS、CSS3-ES6相关(后面会废弃)
2专栏
1课程
4 试题