promis用法(ES6)
- 2021-01-05
在ES6语法中,promise是一个比较重要的知识点,在这里记录一下。
ES6这本书我自己也买了,但是一直没能静下心来从头到尾看一遍,现在先捡重点的写一下,后面慢慢看能不能补齐吧。
一、promise是什么
promise是解决异步的一种方法,里面保存着异步操作的结果和对应应执行的事件。
从语法上来说,promise是一个对象,从它可以获取异步操作的消息。promise提供统一的API,各种异步操作都可以用同样的方法进行处理。
二、promise的特点
- 对象的状态不受外界影响。
promise对象一共有三种状态,分别是Pending(进行中)、Fulfilled(已成功)和Rejected(已失败)。只有异步操作的结果能决定他当前是哪一个状态,任何其他操作都无法改变这个状态。 - 一旦状态改变就不会再变,任何时候都可以得到这个结果。
promise对象只能是从Pending(进行中)变为Fulfilled(已成功)或Rejected(已失败)。当这两种情况发生了,状态就凝固了,称为Resolved(已定型)。这个时候如果再对promise对象添加回调函数,也会立即得到这个结果。
三、promise的优缺点
优点:
- 可以将异步操作用同步操作的流程表达出来,避免了层层嵌套的回调函数。
- promise提供统一的接口,使得控制异步操作更加方便。
缺点
- 无法取消promise,一旦新建就会立即执行。
- 如果不设置回调函数,promise内部抛出的错误不会反应到外部。
- 处于Pending(进行中)状态是,无法得知目前进展到哪一个阶段(刚开始还是即将完成)。
四、promise的基本用法
我们先来创建一个promise实例:
(ES6规定,promise对象是一个构造函数,用来生成promise实例。)
var promise = new Promise(function(resolve, reject){//在这里写异步操作if(/*异步操作成功*/){resolve(value);}else{reject(error);}
});
- promise构造函数接收resolve和reject两个函数作为参数。他们由JavaScript引擎提供,不用自己部署。
- 异步操作成功是,会将操作结果作为参数传入 resolve 函数并执行,将promise对象的状态从Pending(未完成)变为Fulfilled(成功)。
- 异步操作失败时,会将结果作为参数传入 reject 函数并执行,将promise对象的状态变为Rejected(失败)。
- promise实例生成之后,可以用 then 方法分别指定 Resolved 和 Rejected 状态下的回调函数。
promise.then(function(value){// success
}, function(error){// failure
});
- then 方法可以接收两个回调函数作为参数,第一个是成功状态下调用(必选),第二个在失败状态下调用(可写可不写)。
五、简单实例
let promise = new Promise(function(resolve, reject){console.log('Promise 初始化');resolve();
});
promise.then(function(){console.log('resolved');
});
console.log('test');
- promise新建之后会立即执行,所以先输出 ’ Promise 初始化 '。
- 然后输出 ’ test '。
- then方法制定的回调函数将在当前脚本所有同步任务执行完成之后才会执行,所以最后输出 ’ resolved '。
promis用法(ES6)相关推荐
- async await 和 Promis 用法
async 函数是和promise配合在一起使用的,意义在于让异步代码看起来和同步代码是一样的. async 函数返回的是一个 Promise 对象await只能放在async函数里 定义一个函数,三 ...
- new Set()的基础用法(ES6)
1.什么是Set() Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合. Set本身是一个构造函数,用来生成 Set 数据结构 2.增删改查 ...
- es6 Promise 的基本用法
Promise 的基本用法 ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise ...
- es6中promise用法详解
1.含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象. ...
- 【ES6】Promise对象详解
[ES6]Promise对象详解 一.Promise对象的含义 二.Promise对象的用法 三.Promise对象的几个应用[重点] 1.时间延迟函数 2.图片异步加载 查看更多ES6教学文章: 参 ...
- 【ES6】JS的Set和Map数据结构
[ES6]JS的Set和Map数据结构 一.Set 1.基本用法 2.4种操作方法 3.4种遍历方法 4.Set的应用 1)Set转化为数组 2)去除数组的重复元素 3)实现并集(Union).交集( ...
- javascript es6 箭头函数 简介
基本用法 ES6 允许使用"箭头"(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function (v) {return ...
- ES6简单总结(搭配简单的讲解和小案例)
在学习es6的过程中,为了方便自己复习,以及查看,对api做了一个极简用例介绍.如有错误多多指正. 一 let和const 1.let (1)一个大括号就是一个块级作用域,let声明的变量只在自己作用 ...
- ES6之路第十二篇:Promise对象
Promise的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Prom ...
最新文章
- TCP/IP 10.1集成IS-IS协议
- 后台ajax调用中字符串到jquery中的json对象和数组对象转换问题
- buider模式的缺陷
- zabbix监控mysql的性能_zabbix2.4.2实战监控mysql5.6性能
- 2017西安交大ACM小学期数论 [水题]
- python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵
- c#中bin,obj,properties文件夹的作用
- Python爬虫系列:判断目标网页编码的几种方法
- Oracle触发器2-DML触发器
- 使用EasyUI加载树形菜单
- 超级搜索(Super search)
- 有限域的Lagrange插值分析ZUC流密码S盒的代数结构
- N70常用软件大集合
- c++ 与 duckduckgo
- qq企业邮箱的发送邮件服务器地址,腾讯企业邮箱smtp发邮件
- android短信验证码登录,Android注册登录实时自动获取短信验证码
- MyBatis和Hibernate的区别
- 【hibernate进阶】hibernate基本映射
- java毕业生设计车辆调度管理系统计算机源码+系统+mysql+调试部署+lw
- 关于密码复杂度至少8位,包含大写字母、小写字母、数字、特殊字符中至少3种组合的正则