promise
promise是一个对象,从它可以获取异步操作的消息;
特点:对象的状态不受外界影响(Pending进行中、Resolved完成、Rejected失败),只有异步操作的结果可以决定当前状态;一旦状态改变就不会再变(只能从Pending到Resolved和Pending到Rejected);
缺点:一旦创建就会立即执行无法中途取消;如果没有回调函数,内部抛出的错误无法反映到外部;当处于Pending时,无法得知目前进展到哪一阶段;
一般不要在then方法里面定义Reject状态的回调函数(即then的第二个参数),而是使用catch方法;因为这种可以捕获前面then中的错误,也更接近同步写法(try/catch)
catch方法返回的还是一个 promise 对象,因此后面还可以接着调用then方法;catch方法之中,还能再抛出错误
promise.all方法用于将多个promise实例,包装成一个新的promise实例;promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是promise实例;只有p1 p2 p3状态都变成fulfilled,p状态才会变成fulfilled;只要有一个rejected,p就变成rejected;
动力先锋仿阿里巴巴B2B电子商务系统下载前台功能介绍:1、网页首页显示有高级会员推荐,精品推荐,商业机会分类列表,最新供求信息,网站动态,推荐企业,行业动态等;2、商业机会栏目功能有:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,并可以推荐公司,栏目分为分类显示信息,最新的采购、供应、合作和代理信息,搜索时同样按分类,信息,时间,交易类型等搜索;3、展厅展品栏目功能:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,
promise.race也是将多个promise实例包装成新的promise;只要有一个对象状态变了,p状态就会跟着变,返回先改变的对象的值传给p的回调函数;
-
promise.resolve将对象转为promise对象,状态为resolved
// 将thenable对象转为promise对象var thenable = { then(resolve, reject) { resolve(200) } }var p = promise.resolve(thenable) p.then((data) => { console.log(data) }) // 200 promise.reject返回一个promise对象,该实例状态为rejected;这个方法方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。
-
两个附加方法
// donepromise.prototype.done = function(onFulfilled, onRejected) {this.then(onFulfilled, onRejected) .catch(function(reason) { setTimeout(() => {throw reason}, 0) }); };// finallypromise.prototype.finally = function (callback) { let P = this.constructor;return this.then( value => P.resolve(callback()).then(() => value), reason => P.resolve(callback()).then(() => { throw reason }) ); };done用于捕获任何时候可能出现的错误,并全局抛出;
finally用于不管promise对象状态如何,都会执行的操作,接受一个普通的回调函数作为参数(必执行);









