1、Promise 是什么?

抽象表达:

(1) Promise 是一门新的技术(ES6 规范)

(2)Promise 是 JS 中进行异步编程的新解决方案 备注:旧方案是单纯使用回调函数

具体表达:

(1)从语法上来说: Promise 是一个构造函数

(2)从功能上来说: Promise 对象用来封装一个异步操作并可以获取其成功/ 失败的结果值

异步编程:fs文件操作,数据库操作,ajax,定时器等

2、为什么要用 Promise?

指定回调函数的方式更加灵活

1. 旧的: 必须在启动异步任务前指定

2. promise: 启动异步任务 => 返回promie对象 => 给promise对象绑定回调函 数(甚至可以在异步任务结束后指定/多个)

支持链式调用, 可以解决回调地狱问题

1. 什么是回调地狱?

回调函数嵌套调用, 外部回调函数异步执行的结果是嵌套的回调执行的条件

2. 回调地狱的缺点?

不便于阅读 不便于异常处理

3. 解决方案?

promise 链式调用

4. 终极解决方案?

async/await

3、Promise初体验

//resolve 解决  函数类型的数据
//reject  拒绝  函数类型的数据
const p = new Promise((resolve,reject) => {setTimeout(()={//30%  获取1-100的随机数let n= rand(1,100)//判断if(n<=30){resolve(n);  //将promise对象的状态设置为成功}else{reject(n);   //将promise对象的状态设置为失败}},1000)
})//调用then方法
p.then((value)=>{alert('恭喜恭喜',+ value)
},(reason)=>{alert('再接再厉'+ reason)
})

4、Promise实践练习

(1)fs模块

const fs = require('fs')
fs.readFile('./resource/content.txt',(err,data)=>{//如果出错,则抛出错误if(err)  throw err//输出文件内容console.log(data.toString())
})//promise封装
let p =new Promise((resolve,reject) =>{fs.readFile('./resource/content.txt',(err,data)=>{//如果出错,则抛出错误if(err)  throw err//如果成功resolve(data.toString())})})//调用then
p.then( value=>{console.log(value.toString())
},reason=>{console.log(reason)
})

(2)AJAX请求

<div><h2>Promise 封装AJAX请求</h2><button id="btn">点击发送AJAX请求</button>
</div><script>//接口地址  https://api.apiopen.top/getJoke//获取元素对象const btn = document.querySelector('#btn')btn.addEventListener('click',function(){//创建Promiseconst p = new Promise((resolve,reject) =>{//1、创建对象const xhr = new XMLHttpRequest()//2、初始化xhr.open('GET','https://api.apiopen.top/getJoke')//3、发送xhr.send()//4、处理响应结果xhr.onreadystatechange = function(){if(xhr.readyState ===4){//判断响应状态码 2xxif(xhr.status >= 200 && xhr.status <300){//控制台输出响应体resolve(xhr.response)}else{reject(xhr.status)}}}})//调用then方法p.then(value=>{console.log(value)},reason=>{console.log(reason)})})
</script>

【Promise学习】Promise的理解相关推荐

  1. Promise学习:基础入门

    今天来学习下Promise吧,其实这在笔试上也是一个考点. 基本介绍 Promise对象是CommonJS(熟悉的名字吧- -)工作组提出的规范.Promise原本只是社区提出的构想,一些外部函数库率 ...

  2. ES6 Promise的resolved深入理解

    Promise的概念在ES6标准推出来之前已经深入人心,很多框架和第三方库都有类似的实现.但在深入理解ES6的Promise对象的时候,受之前经验的影响,很多概念给人似是而非的感觉,其中有一个特别明显 ...

  3. 大白话讲解Promise(二)理解Promise规范

    上一篇我们讲解了ES6中Promise的用法,但是知道了用法还远远不够,作为一名专业的前端工程师,还必须通晓原理.所以,为了补全我们关于Promise的知识树,有必要理解Promise/A+规范,理解 ...

  4. Promise async/await的理解和用法

    Promise && async/await的理解和用法 为什么需要promise(承诺)这个东西 在之前我们处理异步函数都是用回调这个方法,回调嵌套的时候会发现 阅读性 和 调试 的 ...

  5. Promise 学习心得

    当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise, Promise 有什么用? 在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Prom ...

  6. 理解promise、promise.all、promise.race

    文章目录 promise promise.all promise.race 注意 总结 promise Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. Promise 对象有以 ...

  7. Promise学习笔记(一)

    Promise学习笔记(一) 个人博客:Promise学习笔记(一) 一直有在用Promise,但是没有系统学过Promise,自然也不知道原理.现在就来学习一波. 1. 介绍 Promise是JS中 ...

  8. js Promise学习

    js Promise promise入参为两个 成功时的执行 resolve 失败时的执行 reject promise的状态 肯定(fulfilled) 该 Promise 对应的操作成功了 否定( ...

  9. Promise学习——解决回调地狱问题

    Promise promise 容器概念: callback hell(回调地狱): 文件的读取无法判断执行顺序(文件的执行顺序是依据文件的大小来决定的)(异步api无法保证文件的执行顺序) var ...

  10. ES6学习 - Promise对象

    Promise Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步 ...

最新文章

  1. 宝塔使用webhook自动部署php项目
  2. MySQL 8.0 Server层最新架构详解
  3. Linux I/O 模型(待修改)
  4. win1编辑java环境,在win7下配置java编译环境
  5. 解决The‘Access-Control-Allow-Origin‘ header contains multiple values‘*, ....‘, but only one is allowed
  6. 扎根本地连接未来 千米网的电商“红海”生存术
  7. mysql手动同步_MySql数据库主从手动同步
  8. 我心中的核心组件(可插拔的AOP)~大话开篇及目录
  9. 当最后一位不能为空格_清除工作表中的空格/非打印字符?TRIM与CALEN都无法清除时怎么办...
  10. 三天两夜肝完这篇万字长文,终于拿下了 TCP/IP
  11. 用.NET编程风格实现Ajax——Atlas快速入门
  12. win10禁用键盘自带关机键
  13. facebuilder免费版_Face Blender(人脸混合器)V2018 最新免费版
  14. Windows安装pytorch,傻瓜式教程
  15. IFD-x 微型红外成像仪(模块)与计算机工具软件 IFD_Tool 连接
  16. 数学建模学习(27):对策论模型,代码+案例,讲很详细,别开小差,很烧脑!
  17. 关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案
  18. Python使用pm4py库读取xes文件
  19. 社会分工的理想与现实
  20. 长距离无线通讯LoRa应用介绍

热门文章

  1. 什么是事务?事务的特性?
  2. gcore调试一个并发问题
  3. 熵 计算机学,计算机科学 – 熵的计算机科学定义是什么?
  4. SV环境搭建基础知识整合①
  5. CGB2111-Day13-用户模块管理
  6. 如何保证数据在传输过程中的安全
  7. 台式计算机如何取消屏幕密码,电脑屏幕密码如何取消
  8. io复用相对于多进程、多线程的优势
  9. 【VM】权限不足,无法访问文件
  10. rmi反序列化导致rce漏洞修复_RMI反序列化漏洞分析