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相关推荐

  1. 回调地狱之终极解决方案promise

    使用ES6中一个函数(promise)来解决回调地狱. 先说一个场景 就是我想顺序去读啊a,b,c这三个文件, 那我们正常的做法是不是就是这样的 fs.readFile('./a.txt','utf- ...

  2. node.js学习笔记Day8:关于回调地狱和其解决方案Promise的几个应用和理解。

    9.promise(异步编程) 9.1回调地狱: 由于异步性,程序并不会等待之前一个响应结束.也即下面的这样一个代码,对三个文件的读取顺序并没有保证,可能有时abc的顺序,有时cba.. var fs ...

  3. 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!

    解决异步问题--promise.async/await 一.单线程和异步 1.单线程是什么 2.为什么需要异步 3.使用异步的场景 二.promise 1.promise的三种状态 2.三种状态的表现 ...

  4. 使用promise解决回调地狱_「每日一题」Promise 是什么?

    window.Promise 已经是 JS 的一个内置对象了. 1. Promise 有规格文档吗? 2. 你一般如何使用 Promise. ----------- 目前的 Promise 都遵循 P ...

  5. ES6(三)——回调地狱和promise异步任务顺序执行(传参、错误处理)

    文章目录 方法一.回调函数(回调地狱) 方法二:promise 2.1异步任务传参(单个) 2.2异步任务传参(多个) 2.3 错误处理 2.4 Promiss对象三大状态: (学名) 2.5 Pro ...

  6. Promise的基础使用与生成器配合Promise解决回调地狱

    经过几天对Promise的了解,希望可以帮助到大家. 什么是回调地狱         说起回调地狱 首先想到的是异步 在js中我们经常会大量使用异步回调,常用的ajxa请求 来看下面这段代码: fun ...

  7. Promise的真正意义--不只为回调地狱

    前言 前两天在吃饭时,同事忽然抛出一个问题,Promise 的真正意义是啥? 对话场景如下: 他:Promise 的意义是啥? 我:为解决回调地狱,增强了代码可读性,改善了代码结构 他:这是大家都知道 ...

  8. 回调函数与回调地狱及其解决方法 | JavaScript

    JavaScript中的回调函数与回调地狱及其解决方法 以下为整理的思维导图 图片版+文字版 文末附有参考文章链接 知识点思维导图版 一.什么是回调函数 1.MDN的定义 回调函数是作为参数传给另一个 ...

  9. 使用ES6的Promise完美解决回调地狱

    相信经常使用ajax的前端小伙伴,都会遇到这样的困境:一个接口的参数会需要使用另一个接口获取. 年轻的前端可能会用同步去解决(笑~),因为我也这么干过,但是极度影响性能和用户体验. 正常的前端会把接口 ...

最新文章

  1. PingCode 3.0 发布,开启国产研发自动化时代
  2. 七 递归与二分法、匿名函数、内置函数
  3. Linux - 搭建FastDFS分布式文件系统
  4. wxWidgets:wxWebViewEvent类用法
  5. 一些iis配置相关报错的参考
  6. 解决Ubuntu下pycharm无法输入中文的问题
  7. conda安装pytorch1.10.1+paddlepaddle-gpu2.2.1+cuda10.2+cudnn7.6.5
  8. 做能及之事,过平淡的日子,烦事多忘,好事多为
  9. HTML,CSS,JavaScript学习笔记--导航
  10. php修改语法错误,php语法检查的方法总结
  11. c语言识别按了esc键_憋了三年,史上最全的 F1~F12 键用法整理出来了
  12. adb for linux 工具包,Linux(Ubuntu)下配置安装adb工具
  13. Linux 常用 shell 命令
  14. ZT: 排名前50个常用软件下载(带序列号)
  15. Android 混淆总结
  16. 用dw做html表格边框,Dreamweaver怎么设计彩色边框的表格?
  17. 计算机音频视频格式名,MP3/MP4播放器固件知识常见问题解决
  18. 2021-06-11打开VMware虚拟机时提示“锁定文件失败 打不开磁盘或它所依赖的某个快照磁盘。
  19. 编程:中国有句俗话“三天打鱼两天晒网”,某人从1990年1月1日起三天打鱼两天晒网,编程计算他在某一天是打鱼还是晒网
  20. 【刷题篇】鹅厂文化衫问题

热门文章

  1. 目标检测:RFCN的Python代码训练自己的模型
  2. ICCAVR软件的安装与使用方法(超详细)
  3. 64位格式化字符串漏洞利用——axb_2019_fmt64
  4. 使用modbus4j通过串口解析modbus协议(java)
  5. html自动弹出提示对话框代码,html5简单的手机端弹出对话框确认代码
  6. 基于asp.net的汽车店汽车会员卡管理系统#毕业设计#课程设计
  7. 以真实“商场停车”业务切入——需求分析
  8. BUUCTF [GXYCTF2019]minecraft
  9. html怎么加一小部分图片,如何把一张照片放到电脑桌面一小块空地方
  10. Codeforces 444 C - DZY Loves Colors