Javascript Promise使用细�
1.协议
本文中的一些演示代码是伪代码,不能直接执行。没有特别说明,本文所有演示都是基于ES6规范。Object.method代表静态方法,Object #方法代表实例方法。例如,Promise #代表Promise的实例方法,Promise.resolve代表Promise的静态方法。2 . Promise是什么?
首先,让我们了解承诺是什么
Promise是一个抽象的异步处理对象和对其执行各种操作的组件。我知道你还是不明白什么是承诺。您可以将承诺理解为一个容器,其中包含将来将要结束的事件的结果。此事件通常是异步操作。
Promise最早是在E语言中提出的,E语言是一种基于并行/并行处理设计的编程语言。ES6之后,Javascript开始支持Promise特性,解决异步操作的问题。这里顺便说明一下什么是ES6。ECMAScript是Javascript语言的国际标准,Javascript是ECMAScript的一个实现,ES6(全称ECMAScript 6)就是这个标准的一个版本。
3.Javascript为什么要引入Promise?
如果你细心的话,可能会发现我刚才说的Javascript支持Promise实现,解决了异步操作的问题。说到异步操作,你可能会说,Javascript不能用回调函数处理异步操作吗?原因是Promise是一种更强大的异步处理方法,它有统一的API和规范。让我们看看传统异步操作处理和Promise异步操作处理之间的区别。
使用回调函数处理异步操作:
登录(' http://www.r9it.com/login.php',函数(错误,结果){//if(错误){抛出错误;}//登录成功时的句柄});Node.js等规定JavaScript中回调函数的第一个参数是Error对象,这也是它的约定。如果统一了参数使用的规则,基于上述回调函数的异步处理会写得很清楚。但是,这只是一个编码协议,即使写得不一样,也不会有错误。Promise将类似的异步处理对象和处理规则标准化,按照统一的接口编写,但是在规定的方法之外编写会出错。
用Promise处理异步操作:
var promise=loginByPromise(' http://www . r9it.com/log in . PHP ');答应我。然后(函数(结果){//登录成功时的句柄})。catch(函数(错误){ //登录失败时的句柄});通过上面两个演示,你会发现有了Promise对象,异步操作可以用同步操作的流程来表达。这样,在处理多个异步操作时,可以避免嵌套回调函数(这将在后面演示)。此外,Promise对象提供了统一的接口,这必须通过调用Promise#then和Promise#catch来实现,但是其他方法不可用,这使得异步处理变得更加容易。
4.基本用法
在ES6中,有三种方法可以创建Promise实例(对象)
(1).施工方法
let promies=new Promise((解决,拒绝)={ resolve();//异步处理});Promise构造函数接受函数作为参数,函数的两个参数是resolve和reject。它们是两个函数,由JavaScript引擎提供,不需要自己部署。
(2).通过Promise实例的方法,Promise#then方法返回Promise对象
承诺然后(完成,弹出);(3).通过承诺的静态方法,承诺。解决(),承诺。拒绝()
var p=promise . resolve();p . then(function(value)){ console . log(value);});4.1承诺的实施过程
在新的promise构造函数之后,将返回一个Promise对象;为promise的事件处理结果注册一个回调函数(已解析)和一个异常处理函数(已拒绝);4.2承诺的状态
实例化的承诺有三种状态:
Fulfilled:已-解析,表示解析成功,此时将调用onFulfilled。
Rejected:已-rejected,表示解决方案失败,此时将调用onRejected。
Pending:未解决,表示待解决,既不解决也不拒绝。也就是说,promise对象在创建后的初始化状态。
如上所述,Promise构造函数接受一个函数作为参数,函数的两个参数是resolve和reject。
resolve函数将Promise对象的状态从未处理更改为已成功处理(未解析=已解析),并在异步操作成功时调用,异步操作的结果作为参数传递。
拒绝函数将Promise对象的状态从未处理更改为已处理失败(未解析=已拒绝),并在异步操作失败时调用,异步操作报告的错误作为参数传递。
生成Promise实例后,可以使用then方法和catch方法分别指定解析状态和拒绝状态的回调函数。
下面是诺言的状态图
4.3承诺的基本特征
[1]物体的状态不受外界影响。Promise对象表示一个异步操作,它有三种状态:挂起、履行和拒绝。只有异步操作的结果才能决定当前的状态,其他任何操作都无法改变这个状态。这也是promise这个名字的由来,在英语中是“Promise”的意思,意思是其他的意思不能改变。
[2]状态一旦改变,就不会再改变。你可以随时得到这个结果。只有两种可能:从待定变为已完成和从待定变为已拒绝。只要这两种情况发生,状态就会固化,不会再改变,并且会一直保持这个结果,这就叫化解。如果更改已经发生,如果您向Promise对象添加回调函数,您将立即得到结果。这与事件完全不同。一个事件的特点是,错过了再听,是得不到结果的。
例如,拒绝方法在以下代码中无效
var promise=新promise((去他妈的,拒绝)={ resolve('
版权声明:Javascript Promise使用细�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。