美文网首页
回调地狱与Promises

回调地狱与Promises

作者: 年轻人不喝鸡汤 | 来源:发表于2019-11-04 10:36 被阅读0次

我们来考虑下面的场景(有夸张的成分):
1.我们需要通过一个url从服务器加载一个数据data1,data1中包含l下一个请求的url2
2.我们需要通过data1取出url2,从服务器加载数据data2,data2中包含了下一个请求的url3
3.我们需要通过data2取出url3,从服务器加载数据data3,data3中包含了下一个请求的url4
4.发送网络请求url4,获取最终的数据data4

$.ajax('url1', function(data1)){
  $.ajax(data1['url2'], function(data2)){
    $.ajax(data2['url3'], function(data3)){
      $.ajax(data3['url4'], function(data4)){
        consloe.log(data4);
        })
      })
    })
})

上面代码正常情况下没有问题,可以运行并且可以获取我们需要的值
但是一旦代码量多了就不好看不好维护

如何解决地狱回调?
保持你的代码简短(给函数取有意义的名字,见名知意,而非匿名函数,写成一大坨)

模块化(函数封装,打包,每个功能独立,可以单独的定义一个js文件Vue,react中通过import导入就是一种体现)

处理每一个错误

创建模块时的一些经验法则

承诺/生成器/ES6等

Promises:编写异步代码的一种方式,它仍然以自顶向下的方式执行,并且由于鼓励使用try / catch样式错误处理而处理更多类型的错误

Generators:生成器让你“暂停”单个函数,而不会暂停整个程序的状态,但代码要稍微复杂一些,以使代码看起来像自上而下地执行

Async functions:异步函数是一个建议的ES7功能,它将以更高级别的语法进一步包装生成器和继承

Promises三种状态

1.pending:等待状态,比如正在进行网络请求,或者定时器没有到事件
2.fulfill:满足状态,当我们主动回调resolve时,就处于该状态,并且会回调.then()
3.reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()

相关文章

  • 回调地狱与Promises

    我们来考虑下面的场景(有夸张的成分):1.我们需要通过一个url从服务器加载一个数据data1,data1中包含l...

  • JavaScript 异步模式

    Promises Promises做了点小事,就是把回调函数从传递给其他函数的参数中提取出来(之前回调函数都是作为...

  • Promise、async 和 await

    回调地狱 回调地狱嵌套多个方法调用会创建错综复杂的代码,会难以理解与调试。当想要实现更复杂的功能时,回调函数也会存...

  • Promise

    1.为什么需要Promise 回调地狱回调函数中嵌套回调Promise解决了回调地狱 2. Promise 的基本...

  • Promise

    什么是回调地狱 多层回调函数的相互嵌套,就形成了回调地狱 回调地狱的缺点: 代码耦合性太强,牵一发而动全身,难以维...

  • Javascript知识整理——回调

    嵌套回调与链式回调 嵌套回调 这种代码常常被称为回调地狱,但并不是嵌套导致跟踪异步如此之难。 链式回调 尽管把代码...

  • promise

    异步的出现,解救了无数深陷 回调 不能自拔的人们。 1.回调地狱 过深的嵌套,导致回调地狱,难以追踪回调的执行顺序...

  • ES6快速学习(七)Promise

    回调函数 Promise 解决了什么痛点 回调地狱 代码如下 我的第一个Promise使用 解决回调地狱之链式...

  • 回调地狱

    如果你想阅读体验更好,可以戳链接回调地狱 前言 从前一文中你真的了解回调我们已知道回调函数是必须得依赖另一个函数执...

  • 个人笔记

    同步/异步 回调函数=> 回调地狱 setInterval/setTimeout =>Promise=>Gener...

网友评论

      本文标题:回调地狱与Promises

      本文链接:https://www.haomeiwen.com/subject/gvprbctx.html