资讯专栏INFORMATION COLUMN

Promise对象

boredream / 3230人阅读

摘要:对象用于表示一个异步操作的最终状态完成或失败,以及其返回的值。构造函数执行时立即调用函数,和两个函数作为参数传递给函数在构造函数返回新建对象前被调用。与回调函数返回的结果为不同,的结果为。

Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。大多数人都在使用由其他函数创建并返回

promise对象是由关键字 new 及其构造函数来创建的。该构造函数会?把一个叫做“处理器函数”(executor function)的函数作为它的参数。这个“处理器函数”接受两个函数——resolve 和 reject ——作为其参数。当异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。

语法
new Promise( function(resolve, reject) {...} /* executor */  );

参数

executor
executor是带有 resolve 和 reject 两个参数的函数 。Promise构造函数执行时立即调用executor 函数, resolve 和 reject 两个函数作为参数传递给executor(executor 函数在Promise构造函数返回新建对象前被调用)。resolve 和 reject 函数被调用时,分别将promise的状态改为fulfilled(完成)或rejected(失败)。executor 内部通常会执行一些异步操作,一旦完成,可以调用resolve函数来将promise状态改成fulfilled,或者在发生错误时将它的状态改为rejected。
如果在executor函数中抛出一个错误,那么该promise 状态为rejected。executor函数的返回值被忽略。

流程

Promise有以下几种状态: 
pending: 初始状态,既不是成功,也不是失败状态。
fulfilled: 意味着操作成功完成。 调用resolve方法传递值到then方法调用promise的then里面的onFullfillment()
rejected: 意味着操作失败。 调用reject方法传递值到then方法调用promise的then里面的onReject();或者调用promise的catch()

方法
Promise.prototype.then(onFulfilled, onRejected):添加一个拒绝(rejection) 回调到当前 promise, 返回一个新的promise。
Promise.prototype.catch(onRejected);
Promise.prototype.finally(onFinally)

1)、Promise.prototype.then(onFulfilled,onRejected); 处理Promise状态变为rejected或fulfilled

最多需要有两个参数:Promise 的成功和失败情况的回调函数。
如果忽略针对某个状态的回调函数参数,这个新 Promise 只是简单地接受调用这个 then 的原 Promise的终态作为它的终态。
如果传入的参数 不是函数,则会在内部被替换为(x) => x ,即原样返回 promise 最终结果的函数。

参数:onFulfilled回调函数的参数为(the fulfillment value),onRejected 回调函数的参数为(the rejection reason)。

返回值:返回一个Promise,而它的行为与then中的回调函数的返回值有关。
1、then的回调函数返回一个,then返回一个完成状态的Promise;
2、then的回调函数抛出一个错误,then返回一个拒绝状态的Promise
3、then的回调函数返回一个已完成或已拒绝Promise,then返回一个相同状态和值的Promise;
4、then的回调函数返回一个Pending的Pormise,then返回一个状态,完成和拒绝回调函数一样的Promise

2)、Promise.prototype.catch(onRejected)方法返回一个Promise,并且处理拒绝的情况。 在resolve()后面抛出的错误会被忽略

事实上, calling obj.catch(onRejected) 内部calls obj.then(undefined, onRejected)

参数:onRejected 回调函数的参数为(the rejection reason)。
返回值:返回一个Promise,回调函数onRejected 抛出一个错误或返回一个本身失败的 Promise , 返回的rejected 的Promise;否则,返回完成状态的Promise;

3)、Promise.prototype.finally(): 方法返回一个Promise,在执行then()和catch()后,都会执行finally指定的回调函数。避免同样的语句需要在then()和catch()中各写一次的情况。回调函数无入参,返回的新Promise默认返回当前Promise的(the fulfillment value)或(the rejection reason)。

与Promise.resolve(2).then(() => {}, () => {}) (回调函数返回undefined)(resolved的结果为undefined)不同,Promise.resolve(2).finally(() => {}) resolved的结果为 2。
同样,Promise.reject(3).then(() => {}, () => {})(回调函数返回undefined) (resolved 的结果为undefined), Promise.reject(3).finally(() => {}) rejected 的结果为 3。
finally的回调函数抛出错误或返回rejected状态的Promise,finally将返回一个rejected的Promise.

4)、Promise.all(iterable)
参数:一个可迭代对象,如 Array 或 String。
返回值
1、如果传入的参数是一个空的可迭代对象或无任何Promise对象,返回已完成(already resolved)状态的 Promise。空可迭代对象同步返回
2、其他情况,异步返回一个处理中(pending)的Promise。

all返回的Promise完成状态的结果都是一个数组,它包含所有的传入迭代参数对象的值(也包括非 promise 值)。有一个Promise失败的时候,失败的那个结果给失败状态的回调函数,而不管其它 promise 是否完成。

5)、Promise.race(iterable) 方法返回一个 pending promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
参数:一个可迭代对象,如 Array 或 String。
返回值:如果传的迭代是空的,则返回的 promise 将永远等待;如果迭代包含一个或多个Promise和/或已解决/拒绝的Promise,则 Promise.race 将解析为迭代中找到的第一个值。

6)、Promise.reject(reason)方法返回一个带有拒绝原因reason参数的Promise对象。

7)、Promise.resolve(value)方法返回一个以给定值解析后的Promise 对象。
参数:Promise对象解析的参数。也可以是一个Promise对象,或者是一个thenable。
返回值:一个解析过带着给定值的Promise对象,如果返回值是一个promise对象,则直接返回这个Promise对象。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97319.html

相关文章

  • Promise——从阅读文档到简单实现(一)

    摘要:意味着操作成功完成。方法接收失败情况的回调函数作为参数,返回一个对象。参数回调函数不接收任何参数,当对象变成状态时被调用。现在各个方法的参数返回值功能和使用方法已经有个大概的了解了,为了进一步理解其原理,接下来我打算简单地实现一下它。 前言 最近几周参加笔试面试,总是会遇到实现异步和处理异步的问题,然而作者每次都无法完美地回答。在最近一次笔试因为 Promise 而被刷掉后,我终于下定...

    yanwei 评论0 收藏0
  • 关于Promise

    摘要:反之,操作失败,对象由状态转换为状态,此时回调函数会执行方法。这里需要注意的是,虽然在之后便执行了方法,但是并不是意味着往后的对象不执行了,其他的还是对象还是要执行的,只是不会再调用函数。 在 掘金上看见一篇写promise的文章,感觉作者写的很棒,文章链接在这:八段代码彻底掌握 Promise 。看完之后感觉学到了很多,所以又重新把JavaScript Promise迷你书(中文版)...

    546669204 评论0 收藏0
  • js-Promise

    摘要:总结用方法创建对象用或添加对象的处理函数它的作用是为实例添加状态改变时的回调函数。方法是的别名,用于指定发生错误时的回调函数。 一、为什么需要Promise Javascript 采用回调函数(callback)来处理异步编程。从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的回调金字塔(Pyramid of Doom),绝对是一种糟糕的编程体验。于是...

    xcold 评论0 收藏0
  • 简单学习 Promise 对象

    摘要:方法是的别名,用于指定发生错误时的回调函数。由于字符串不属于异步操作判断方法是字符串对象不具有方法,返回实例的状态从一生成就是,所以回调函数会立即执行。出错了等同于出错了出错了上面的代码生成一个对象的实例,状态为,回调函数会立即执行。 引言 Promise 是异步编程的一种解决方案,比传统的解决方案——回调和事件——更合理且强大。最近的项目要用到这个,就参照阮一峰老师的《ES6标准入门...

    muzhuyu 评论0 收藏0
  • 尝试实现一个Promise

    摘要:的实现说明没有执行里的函数说明执行了里的函数说明执行里的函数过程中出现错误和执行状态时的回调函数后返回的结果都需要执行传进来的对象不能等于当前的对象回调返回的值或者的值是对象时需要等待该对象的状态变更设置当前状态的状态和值执行回调队列里的函 function resolve_promise_value(promise,value) {//PromiseA+的实现 var th...

    DTeam 评论0 收藏0
  • 关于promise的小结

    摘要:则是把类似的异步处理对象和处理规则进行规范化,并按照采用统一的接口来编写,而采取规定方法之外的写法都会出错。这个对象有一个方法,指定回调函数,用于在异步操作执行完后执行回调函数处理。到目前为止,已经学习了创建对象和用,方法来注册回调函数。 Promise 本文从js的异步处理出发,引入Promise的概念,并且介绍Promise对象以及其API方法。 js里的异步处理 可以参考这篇文章...

    Tony_Zby 评论0 收藏0

发表评论

0条评论

boredream

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<