从 回调地狱 到神奇的 promise
1.为什么会产生回调地狱
当我们需要在异步的末尾做一些事情的时候,我们就会用到回调函数。当回调函数嵌套过多的时候,我们的代码就没有可阅读性和可维护性,这种情况我们就称之为回调地狱。
2.promise
这个promise是es6的语法,是异步编程的一种解决方法,比传统的解决方法更强加,更合理。
3.promis的语法
let p1 = new Promise(function (resolve, reject) {})p1.then(function () {// 这个函数就是当你的 Promise 里面书写 resolve() 的时候,就会调用了console.log(123)})
这里的2个参数 : 如果成功了,就是 resolve,成功之后执行函数p1.then()
如果失败了,就是 reject,失败之后执行的函数p1.catch()
4.promise的高级应用
当你在这个 function 里面 return 一个新的 promise 对象的时候
可以继续.then() ,以ajax的请求计算sum为例:
new Promise(function (resolve) {ajax({url: './ajax1.php',data: {a: 100,b: 200},dataType: 'json',success: function (result) {resolve(result)}})}).then(function (res) {console.log(res) // 第一次请求的结果return new Promise(function (resolve) {ajax({url: './ajax2.php',data: res,dataType: 'json',success: function (result) {resolve(result)}})})}).then(function (res) {console.log(res)}
5.回调地狱的终极解决办法
就是想一个办法把异步代码写的 看起来像 同步代码
会用到es7的语法:async/await 函数
语法:
1> async 是一个关键字 要写在函数的前面
async function fn() {}
let fn = async () => {}
2> await 也是一个关键字 要写在函数的里面
await 关键字有一个作用,就是可以把 promise 本该再 then 里面接受的结果
直接再 await 前面定义一个变量来接受;
await 会把后面那个 promise 对象当作一个等待的对象;
await 后面行的代码会等到这个 promise 执行完毕以后再继续;
async function fn() {console.log('start')let res = await new Promise(function (resolve, reject) {setTimeout(function () {resolve(123)}, 1000)})console.log(res)console.log('end')}fn()
上面的这个代码会先打印 strat,再打印end ,最后打印 res
从 回调地狱 到神奇的 promise相关推荐
- 回调地狱之终极解决方案promise
使用ES6中一个函数(promise)来解决回调地狱. 先说一个场景 就是我想顺序去读啊a,b,c这三个文件, 那我们正常的做法是不是就是这样的 fs.readFile('./a.txt','utf- ...
- node.js学习笔记Day8:关于回调地狱和其解决方案Promise的几个应用和理解。
9.promise(异步编程) 9.1回调地狱: 由于异步性,程序并不会等待之前一个响应结束.也即下面的这样一个代码,对三个文件的读取顺序并没有保证,可能有时abc的顺序,有时cba.. var fs ...
- 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
解决异步问题--promise.async/await 一.单线程和异步 1.单线程是什么 2.为什么需要异步 3.使用异步的场景 二.promise 1.promise的三种状态 2.三种状态的表现 ...
- 使用promise解决回调地狱_「每日一题」Promise 是什么?
window.Promise 已经是 JS 的一个内置对象了. 1. Promise 有规格文档吗? 2. 你一般如何使用 Promise. ----------- 目前的 Promise 都遵循 P ...
- ES6(三)——回调地狱和promise异步任务顺序执行(传参、错误处理)
文章目录 方法一.回调函数(回调地狱) 方法二:promise 2.1异步任务传参(单个) 2.2异步任务传参(多个) 2.3 错误处理 2.4 Promiss对象三大状态: (学名) 2.5 Pro ...
- Promise的基础使用与生成器配合Promise解决回调地狱
经过几天对Promise的了解,希望可以帮助到大家. 什么是回调地狱 说起回调地狱 首先想到的是异步 在js中我们经常会大量使用异步回调,常用的ajxa请求 来看下面这段代码: fun ...
- Promise的真正意义--不只为回调地狱
前言 前两天在吃饭时,同事忽然抛出一个问题,Promise 的真正意义是啥? 对话场景如下: 他:Promise 的意义是啥? 我:为解决回调地狱,增强了代码可读性,改善了代码结构 他:这是大家都知道 ...
- 回调函数与回调地狱及其解决方法 | JavaScript
JavaScript中的回调函数与回调地狱及其解决方法 以下为整理的思维导图 图片版+文字版 文末附有参考文章链接 知识点思维导图版 一.什么是回调函数 1.MDN的定义 回调函数是作为参数传给另一个 ...
- 使用ES6的Promise完美解决回调地狱
相信经常使用ajax的前端小伙伴,都会遇到这样的困境:一个接口的参数会需要使用另一个接口获取. 年轻的前端可能会用同步去解决(笑~),因为我也这么干过,但是极度影响性能和用户体验. 正常的前端会把接口 ...
最新文章
- PingCode 3.0 发布,开启国产研发自动化时代
- 七 递归与二分法、匿名函数、内置函数
- Linux - 搭建FastDFS分布式文件系统
- wxWidgets:wxWebViewEvent类用法
- 一些iis配置相关报错的参考
- 解决Ubuntu下pycharm无法输入中文的问题
- conda安装pytorch1.10.1+paddlepaddle-gpu2.2.1+cuda10.2+cudnn7.6.5
- 做能及之事,过平淡的日子,烦事多忘,好事多为
- HTML,CSS,JavaScript学习笔记--导航
- php修改语法错误,php语法检查的方法总结
- c语言识别按了esc键_憋了三年,史上最全的 F1~F12 键用法整理出来了
- adb for linux 工具包,Linux(Ubuntu)下配置安装adb工具
- Linux 常用 shell 命令
- ZT: 排名前50个常用软件下载(带序列号)
- Android 混淆总结
- 用dw做html表格边框,Dreamweaver怎么设计彩色边框的表格?
- 计算机音频视频格式名,MP3/MP4播放器固件知识常见问题解决
- 2021-06-11打开VMware虚拟机时提示“锁定文件失败 打不开磁盘或它所依赖的某个快照磁盘。
- 编程:中国有句俗话“三天打鱼两天晒网”,某人从1990年1月1日起三天打鱼两天晒网,编程计算他在某一天是打鱼还是晒网
- 【刷题篇】鹅厂文化衫问题
热门文章
- 目标检测:RFCN的Python代码训练自己的模型
- ICCAVR软件的安装与使用方法(超详细)
- 64位格式化字符串漏洞利用——axb_2019_fmt64
- 使用modbus4j通过串口解析modbus协议(java)
- html自动弹出提示对话框代码,html5简单的手机端弹出对话框确认代码
- 基于asp.net的汽车店汽车会员卡管理系统#毕业设计#课程设计
- 以真实“商场停车”业务切入——需求分析
- BUUCTF [GXYCTF2019]minecraft
- html怎么加一小部分图片,如何把一张照片放到电脑桌面一小块空地方
- Codeforces 444 C - DZY Loves Colors