Promise对象与异步操作结果

Promise对象主要用途:
promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。简单点说就是处理异步请求。我们经常会做些承诺,如果我赢了你就嫁给我,如果输了我就嫁给你之类的诺言。这就是promise的中文含义:诺言,一个成功,一个失败。
commonJS下的一个规范 , 规范的就是JS中的异步操作方式


Promise对象的三种状态:
一个 Promise有以下几种状态:

  • pending: 初始状态,不是成功或失败状态。
  • fulfilled: 意味着操作成功完成。
  • rejected: 意味着操作失败。

Promise下的属性

  • Promise.length
    长度属性,其值总是为 1 (构造器参数的数目).
  • Promise.prototype
    表示 Promise 构造器的原型.

Promise下的方法

  • Promise.all(iterable)
    这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。(可以参考jQuery.when方法—译者注)
  • Promise.race(iterable)
    当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
  • Promise.reject(reason)
    返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法
  • Promise.resolve(value)
    返回一个状态由给定value决定的Promise对象。如果该值是一个Promise对象,则直接返回该对象;如果该值是thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定;否则的话(该value为空,基本类型或者不带then方法的对象),返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法。通常而言,如果你不知道一个值是否是Promise对象,使用Promise.resolve(value) 来返回一个Promise对象,这样就能将该value以Promise对象形式使用。

Promise原型方法

  • Promise.prototype.catch(onRejected)
    添加一个否定(rejection) 回调到当前 promise, 返回一个新的promise。如果这个回调被调用,新 promise 将以它的返回值来resolve,否则如果当前promise 进入fulfilled状态,则以当前promise的肯定结果作为新promise的肯定结果.
  • Promise.prototype.then(onFulfilled, onRejected)
    添加肯定和否定回调到当前 promise, 返回一个新的 promise, 将以回调的返回值 来resolve.

Promise实际讲解
上面从promise的相关文档拷贝过来,如果理解了上面的其实上并不难。按照我的理解来讲解一下promise这个对象的意思和使用方法。首先我们要从操作的步骤开始。

1.首先我们需要从创建promise对象开始,promise 对象是由关键字 new 及其构造函数来创建的,因此我们可以通过var promise = new Promise()的方法创建一个promise对象,也可以直接用new Promise()方法创建。

2.我们在创建promise对象的过程中需要给对象方法赋值,Promise()有一个函数,该函数为处理函数,有两个参数,reject和resolve分别是返回一个带有状态的promise对象,前者为失败或者拒绝,后着为完成或者成功的意思。注意,该参数为函数,在Promise()的函数中的函数参数。以此,我们可以写成这样。
var promise = new Promise(function(resolve,reject){
resolve();//返回完成状态的promise对象。
})

3.通过promise对象下的方法操作结果,因为我们上面已经获得了一个成功完成状态的promise对象了,如果不使用两个参数则promise为初始状态,不会执行后续的操作。接下来我们来了解一个then方法。通过promise.then()来调用,then方法有两个函数参数,可只写一个,第一个为成功完成,即resolve()后的promise对象执行的函数,第二个为拒绝或者失败,即reject()后的promise对象执行的函数,如果只写一个则默认为成功函数。写法如下。
当然也可以作链式操作,避免嵌套的麻烦,应用场景一般在于多个判断,例如我在第一个then的函数中return另外一个promise对象则可以进入下一个then的判断。
promise.then(function(){},function(){});


Promise其他方法讲解

除了以上的then方法,还有许多其他的方法,例如catch、还有原型的all和race方法。我们来逐步讲解。

1.catch方法,该方法很简单,只有一个函数参数,为失败的promise做处理的函数,简单来说就是then方法的第二个参数版。在此不做演示。

2.all方法和race方法用法相似就在此一起讲解,两个方法都是返回一个新的promise对象,新的promise对象也可以进行then或者catch方法的操作,这个原型方法主要的用途是对几个promise对象整体的状态进行操作,all的意思是全部promise对象返回成功状态他才返回成功状态,而race方法主要是其中一个为成功他就返回为成功,简单来说明的话就是加了&&和||符号来判断,我们以下来做个实例。race方法和all同样的。
var promise = Promise.all(promise1,promise2);
promise.then(function(){},function(){})


Promise封装代码介绍
也就是基于promise开发出的实际代码,也可以说封装好的promise对象,有以下几个。

thenjs、whenjs(jquery的promise)

我们来简单介绍下jquery下的whenjs,首先要导入jquery文件。然后创建promise对象通过该方法。

var dfd = $.Deferred();

whenjs中的then方法还是没有太大区别,但是新增了done方法和fail方法,道理等同于catch方法,前者成功后者失败的方法,然后all方法是通过$.when()来完成。参数为promise对象不过多解释。

以上为博主自主研究,如果有误请指出,谢谢~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值