JS中promise对象的作用与使用

JavaScript018

JS中promise对象的作用与使用,第1张

promise的作用:ajax是异步请求,多层嵌套会造成回调地狱,promise模拟同步,将异步回调类似于同步来处理业务逻辑。

var p = new Promise(function(){

//这里用于处理异步的回调

}),必传回调函数,不传程序会抛出异常。

创建实例对象时,回调函数会立即执行。

promise的三种状态:

pending:正在进行状态

fulfilled:完成状态

rejected:失败状态

传参1 resolve,是个函数,只要这个函数执行了说明是成功状态,参数2选传,rejecte,是个函数,这个函数执行了说明是失败状态。这两个只能执行一个,变化不可逆。

promise两种结果:

从进行到失败

从进行到成功

通过rejecte(data)h或者resolve(data)将异步响应的数据提取出来,在promise外部使用。

promise的then方法,用于处理成功或者失败的回调。

//接收上面的回调

var p1 =p.then(function(res){

})。执行后返回一个promise对象,但和p不是同一个对象。当p1执行了并且return出res,就可以连缀

p1=p.then(function(res){

return res

}).then(function(data){

//处理成功回调

}).catch(function(){

//处理失败回调

})

可以简写p.then(function(res){

//处理成功信息

},function(err){

//处理异常信息

})。但一般不这样写。

使用案例如下,

promise的then方法是异步方法,但会优先于定时器执行。

在我们的程序中有些操作是需要等到一些接口的数据返回之后才能做的操作

比如我们在一个页面需要发送好几个请求,这几个请求都发送完了我们再去隐藏 loading效果,一开始我是这样操作的:

执行效果:

只是返回了 失败回调,这显然不是我们想要的效果

但是,我们写好的时候,使用 Promise.all()方法的时候,想起来,Promise.all()这个方法,只要这个方法的任意一个 promise有reject也就是失败状态的时候,promise 不管剩余的其他的promise 是否完成,就会停止当前的监听,那就有可能丢失当前的 其他请求的状态和结果,所以我们在写的时候,就应该考虑,我们当前promise的执行权是不是应该交给当前单个promise的回调具体应该怎么操作呢

执行效果:

然后我们判断,返回结果的 数组的长度是否等于传入数组的长度,就能知道请求是发送完成了(不管请求结果是怎样);

完!!