摘要:执行时机新建后会立即执行,同步的,但是和的回调函数是异步的,但是它的回调是放在本轮循环的末尾执行,并不是放到下次事件循环中执行。在状态改变后再添加回调函数仍能立即得到结果,这是与事件的区别,事件结束再去监听,是得不到结果的。
简介
本文只是针对对Promise有一定掌握的人士,列举了Promise需要记住和掌握的关键点,不是讲Promise的基础知识。如果是学习Promise,请移步阮一峰老师的博客。执行时机
Promise新建后会立即执行,同步的,但是resolved和rejected的回调函数是异步的, 但是它的回调是放在本轮循环的末尾执行,并不是放到下次事件循环中执行。Promise 三种状态
pending (进行中)
fulfilled (已成功)
rejected (已失败)
三种状态只能是由pending到fulfilled,或由pending到rejected。状态一旦改变,不会再变。 在状态改变后再添加回调函数仍能立即得到结果,这是与事件的区别,事件结束再去监听,是得不到结果的。Resolve
Rejected参数会传递给then回调函数
和rejected都不会终止后续代码执行,resolved后面的代码仍会执行,除非在resolved时return
当resolved的参数是一个promise实例时,会等待上一个promise的状态返回
catch参数传递给回调函数
参数通常是Error对象的实例
运行抛出异常,状态也会变为Rejected
then不仅状态变为rejected时会触发,运行中抛出的错误也会被catch捕获
resolve之后抛出的异常,不会被捕获,状态只会更改一次,更改后就不会改变。
“冒泡”性质,一直向后传递,直到被捕获。也就是说错误肯定会被后面的catch捕获。
如果不写catch,promise有错误时,不会有任何反应,不会退出进程、终止脚本执行,promise和外部代码“隔离”(未来可能更改这规则)
后面可以继续跟then和catch
返回一个resolved状态的promise对象,所以如果抛出一个错误,只会触发第一个catch
finally返回的是一个新的promise对象,不是原来的
不推荐传rejected回调函数,这样无法捕获resolved回调函数中的错误
如果函数中返回的是一个promise,则后面的then会等待这个promise的结果
finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。
与状态无关的,resolved或rejected了都会触发finally(底层也是这么实现的); 但如果promise没有返回resolved或rejected是不会执行的。Promise.all()
Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
自动把包装的实例转化成promise实例
包装的promise实例都resolved了它就resolved
有一个rejected,它就rejected
如果容器中的实例有自己的catch,则不会触发all的catch
因为catch返回是一个新的promise,catch已经处理了错误,返回的promise是resolved的,所以对all来说是两个resolved的实例Promise.race()
和all类似,只是它是有一个实例率先改变状态了,它的状态就改变了。Promise.resolve()
把对象转换成promise对象
参数是一个 Promise 实例
原封不动地返回这个实例。
参数是一个thenable对象
thenable对象指的是具有then方法的对象,比如下面这个对象。
let thenable = { then: function(resolve, reject) { resolve(42); } };
resolve会立即执行then方法,然后返回一个resolved的promise对象
参数不是具有then方法的对象,或根本就不是对象
返回一个状态是resolved的promise对象
不带有任何参数
直接返回一个resolved状态的 Promise 对象。(注意promise回调的执行时机)Promise.reject()
返回一个状态为rejected的promise对象
Promise.reject()方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。这一点与Promise.resolve方法不一致Promise.try
这个有需要一些技术储备,后续补充。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94402.html
摘要:的翻译文档由的维护很多人说,阮老师已经有一本关于的书了入门,觉得看看这本书就足够了。前端的异步解决方案之和异步编程模式在前端开发过程中,显得越来越重要。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。 JavaScript Promise 迷你书(中文版) 超详细介绍promise的gitbook,看完再不会promise...... 本书的目的是以目前还在制定中的ECMASc...
摘要:常用知识总结之前总结了中的一些知识点。在年正式发布了,简称,又称为。作为构造函数的语法糖,同时有属性和属性,因此同时存在两条继承链。子类的属性,表示构造函数的继承,总是指向父类。 ES6常用知识总结 之前总结了es5中js的一些知识点。这段时间看了石川blue老师讲解的es6课程,结合阮一峰老师的es6教程,随手做了一些笔记和总结分享给大家。内容还是es6主要的知识点,基本没有什么创新...
摘要:常用知识总结之前总结了中的一些知识点。在年正式发布了,简称,又称为。作为构造函数的语法糖,同时有属性和属性,因此同时存在两条继承链。子类的属性,表示构造函数的继承,总是指向父类。 ES6常用知识总结 之前总结了es5中js的一些知识点。这段时间看了石川blue老师讲解的es6课程,结合阮一峰老师的es6教程,随手做了一些笔记和总结分享给大家。内容还是es6主要的知识点,基本没有什么创新...
摘要:常用知识总结之前总结了中的一些知识点。在年正式发布了,简称,又称为。作为构造函数的语法糖,同时有属性和属性,因此同时存在两条继承链。子类的属性,表示构造函数的继承,总是指向父类。 ES6常用知识总结 之前总结了es5中js的一些知识点。这段时间看了石川blue老师讲解的es6课程,结合阮一峰老师的es6教程,随手做了一些笔记和总结分享给大家。内容还是es6主要的知识点,基本没有什么创新...
阅读 747·2023-04-26 03:04
阅读 2835·2021-11-15 18:10
阅读 1154·2021-09-03 10:28
阅读 1062·2019-08-30 15:53
阅读 859·2019-08-30 12:45
阅读 1931·2019-08-30 11:03
阅读 2827·2019-08-29 14:01
阅读 2907·2019-08-28 18:24