地狱归来(回调地狱的解决方案)

1,495 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

异步读取数据,这是我们非常熟悉的,但是其中就存在这么一种被称之为回调地狱的数据读取方式。从它的名字上看,也知道开发者们面对着它的时候是有多头疼了。长得就跟个俄罗斯🪆套娃🪆似的。

因为异步操作,会在发出请求之后,无需等待返回结果,就可以直接执行后面的代码。如果这时有一个接口它的请求参数是从另一个请求接口返回的数据中获取的,这时就必须保证,这个接口的请求是发生在另一个接口返回数据之后。如果处理不当就会形成回调地狱,看上去就感觉晕晕乎乎的,维护成本骤增。

如何从地狱重返人间呢?这里有三条溜光大道供小伙伴们选择,打着粗溜滑就回来了😁

【 溜光大道一:Promise 】

  • 两个参数 resolve(结果),reject()
  • 链式编程 确保了程序可以顺序执行 .then().then().catch()

【 溜光大道二:async / await 】

  • async 函数中有异步操作,无需等待结果,可以直接执行下面的代码
    • 不语 await 同时使用的话,形同虚设(没有价值的呀)
  • await 使异步操作有同步操作的体验感,需要等待结果出来,再继续执行下面的代码
    • 必须与 async 成对使用
    • 可以获取到 Promise.resolve 返回的结果
    • 被等待的 Promise 实例必须有返回状态,不然 await 就 ❄️ 凉凉 ❄️ 了,await 后面的代码就都不会被执行了,就在那一直等着,等到地老天荒也不会开花结果

【 溜光大道三:thunk 】

  • 可以自动执行 Generator 函数的方法
  • 只会接受回调函数作为唯一的参数
  • 惰性求值函数
  • 对多参数的柯里化
  • 只要参数中包含了回调函数,就可以写成 thunk 的形式

回调地狱的解决方案,旨在使整个程序看上去清爽整洁,能够时异步操作也能拥有同步操作的体验感。跟俄罗斯 🪆 套娃 🪆 say:“ byebye !!!!!! ”