返回目录

promise是什么?

promise是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);Promise有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected创造promise实例后,它会立即执行。

能解决什么问题?

一般来说我们会碰到的回调嵌套都不会很多,一般就一到两级,但是某些情况下,回调嵌套很多时,代码就会非常繁琐,会给我们的编程带来很多的麻烦,这种情况俗称回调地狱。promise是用来解决两个问题的:1、回调地狱,代码难以维护,常常第一个的函数的输出是第二个函数的输入这种现象2、promise可以支持多个并发的请求,获取并发请求中的数据注:这个promise可以解决异步的问题,本身不能说promise是异步的
//一般回调模式
function sleep(time, callback) {setTimeout(function () {callback();}, time);
}
sleep(5000, function () {console.log('我会在5秒后打印');
});
//promise模式
function sleep(time) {return new Promise((resolve) => setTimeout(resolve, time));
}
sleep(5000).then(() => console.log('我会在5秒后打印'));

promise用法

promise是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。1、创建let p = new Promise((resolve, reject) => {});Promise的构造函数接收一个参数:函数,并且这个函数需要传入两个参数:resolve:异步操作执行成功后的回调函数reject:异步操作执行失败后的回调函数2、then链式操作的用法p.then((data) => {console.log(data);}).then((data) => {console.log(data);}).then((data) => {console.log(data);});3、reject的用法把Promise的状态置为rejected,这样我们在then中就能捕捉到,然后执行“失败”情况的回调。let p = new Promise((resolve, reject) => {let num = Math.ceil(Math.random() * 10);//生成1-10的随机数if (num <= 5) {resolve(num);} else {reject('数字不符合要求');}});p.then((data) => {console.log(num);}, (err) => {console.log('rejected', err);};then中传了两个参数,then方法可以接受两个参数,第一个对应resolve的回调,第二个对应reject的回调,所以我们能够分别拿到他们传过来的数据。4、catch的用法Promise对象除了then方法,还有一个catch方法,它和then的第二个参数一样,用来指定reject的回调。p.then((data) => {console.log(data);}).catch((err) => {console.log('rejected', err);});效果和写在then的第二个参数里面一样。不过它还有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死,而是会进到这个catch方法中。5、all的用法谁跑的慢,以谁为准执行回调。all接收一个数组参数,里面的值最终都算返回Promise对象Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。let Promise1 = new Promise((resolve, reject) => {});let Promise2 = new Promise((resolve, reject) => {});let Promise3 = new Promise((resolve, reject) => {});let p = Promise.all([Promise1, Promise2, Promise3]);p.then(() => {//三个都成功,则成功  }, () => {//只要有失败,则失败});6、race的用法谁跑的快,以谁为准执行回调race按字面解释,就是赛跑的意思。race的用法与all一样,只不过all是等所有异步操作都执行完毕后才执行then回调。而race的话只要有一个异步操作执行完毕,就立刻执行then回调。注意:其它没有执行完毕的异步操作仍然会继续执行,而不是停止。Promise.race([Promise1, Promise2]).then((data) => {console.log(data);}).catch((err) => {console.log(err);});

参考:链接

前端学习笔记 - promise是什么?能解决什么问题?相关推荐

  1. web前端学习笔记(最新)

    web前端学习笔记 大家好,我是链表哥,新的学期,新的学习,我会为您展示我的学习进程. 一:什么是WEB前端? 所谓的Web前端指的是用户所能接触到的,并服务于用户的前沿端口,经我们程序员编辑修饰后展 ...

  2. 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单

    2017-2-15从0开始前端学习笔记-图片-表格-表单 标签 图片 图片<img src="#" alt="文本说明 不能加载图片时显示" title= ...

  3. 前端学习笔记:Bootstrap框架入门

    前端学习笔记:Bootstrap框架入门 一.Bootstrap概述 1.基本信息 ​Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS. ...

  4. 【前端学习笔记】JavaScript + jQuery + Vue.js + Element-UI

    前端学习笔记 JavaScript jQuery Vue.js Element-UI Java 后端部分的笔记:Java 后端笔记 JavaScript 基础语法(数据类型.字符串.数组.对象.Map ...

  5. 前端学习笔记(this)

    前端学习笔记(this) 在函数中调用 在函数中直接调用 函数作为对象的方法进行调用 不在函数中调用 es6的箭头函数 在函数中调用 在函数中直接调用 1 严格模式和非严格模式中this 严格模式下t ...

  6. 前端学习笔记(js基础知识)

    前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...

  7. 前端学习笔记:省市区三级联动

    前端学习笔记:省市区三级联动 一.数据库 sql表是自关联的表. 表名:province_city_district 字段: id:区域自身的id pid:区域的父级id name:区域自身的名字 二 ...

  8. 前端学习笔记之CSS3基础语法与盒模型(二)

    前端学习笔记之 CSS3基础语法与盒模型 CSS3简介 CSS(cascading style sheet,层叠式样式表)是用来给HTML标签添加样式的语言 CSS3是CSS的最新版本,增加了大量的样 ...

  9. 前端学习笔记36-水平方向的布局

    前端学习笔记36-水平方向的布局 上一节中的margin-right是没用的,为什么呢? 子元素的七个水平布局设置: margin-left border-left padding-left widt ...

  10. 前端学习笔记(HTMLCSS)(06)CSS盒子模型练习

    前端学习笔记(HTML&CSS)(06) 练习一:图片列表 <!DOCTYPE html> <html lang="en"> <head> ...

最新文章

  1. 近期活动盘点:首期AI Time PhD:清北师兄分享前沿研究成果、“科技驱动,正向创新”医工结合高峰论坛...
  2. ASP.NET的五大数据控件分析
  3. 虚方法virtual详解(转载)
  4. 工具箱 - Putty 安装调试3
  5. 02-css的选择器
  6. linux查看帮助信息,命令帮助信息的获取
  7. 银监会计算机知识点,2015国考银监会计算机专业考试分析
  8. python fpga chips_FPGA实现USB2.0同步读数据传输且用chipscop抓取波形(3)
  9. 1985-2020年全国各省一二三产业就业人数/各省分产业就业人数数据(无缺失)
  10. 中国各省份中英文,Json格式
  11. 池建强 博客 Mac使用技巧 第一季
  12. 百度智能云在AI云服务市场四度夺魁!
  13. 当img没有图片时候,显示默认图片代码
  14. SpringBoot集成Nacos
  15. 该网站安全证书有问题 宝塔面板配置ssl中遇到的“坑”
  16. CVPR2020 Learning in the Frequency Domain学习笔记
  17. Yocto新增一个hello程序
  18. mybatis源码过程学习梳理
  19. linux常用命令_【Linux分享】Linux常用命令+教程分享
  20. UnityShader学习笔记 Unity的表面着色器

热门文章

  1. 博客留言外链是否有用?
  2. delphi 18位身份证号码的校验
  3. 这是我见过最好的唐诗,而且通俗易懂
  4. win2008系统漏洞扫描所得的几个漏洞详解
  5. Windows中获取用户密码
  6. Intel Edison 第一次使用的更新
  7. win7“您可能没有权限使用网络资源”的解决办法
  8. python出现syntaxerror_Python SyntaxError语法错误原因及解决
  9. Centos7模板机制作
  10. 波士顿学院计算机科学专业,波士顿学院计算机专业