iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue Promise如何解决回调地狱问题
  • 491
分享到

Vue Promise如何解决回调地狱问题

2023-07-05 00:07:13 491人浏览 独家记忆
摘要

本篇内容介绍了“Vue Promise如何解决回调地狱问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题首先,什么是回调地狱:

本篇内容介绍了“Vue Promise如何解决回调地狱问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

问题

首先,什么是回调地狱:

  • 层嵌套的问题。

  • 每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。

当一个接口需要依赖另一个接口的请求数据时,通常有两种解决方式

  • 将请求数据的接口设为同步,之后调另一个接口

  • 在请求数据接口的成功回调里调另一个接口

这两种问题在回调函数时代尤为突出。Promise 的诞生就是为了解决这两个问题。

典型的高阶函数,将回调函数作为函数参数传给了readFile。但久而久之,就会发现,这种传入回调的方式也存在大坑, 比如下面这样:

fs.readFile('1.JSON', (err, data) => {    fs.readFile('2.json', (err, data) => {        fs.readFile('3.json', (err, data) => {            fs.readFile('4.json', (err, data) => {            });        });    });});

回调当中嵌套回调,也称回调地狱。这种代码的可读性和可维护性都是非常差的,因为嵌套的层级太多。而且还有一个严重的问题,就是每次任务可能会失败,需要在回调里面对每个任务的失败情况进行处理,增加了代码的混乱程度。

解决方案

Promise 利用了三大技术手段来解决回调地狱:

  • 回调函数延迟绑定。

  • 返回值穿透。

  • 错误冒泡。

首先来举个例子:

let readFilePromise = (filename) => {    fs.readFile(filename, (err, data) => {        if(err) {            reject(err);        }else {            resolve(data);        }    })}readFilePromise('1.json').then(data => {    return readFilePromise('2.json')});

看到没有,回调函数不是直接声明的,而是在通过后面的 then 方法传入的,即延迟传入。这就是回调函数延迟绑定。

然后我们做以下微调:

let x = readFilePromise('1.json').then(data => {    return readFilePromise('2.json')//这是返回的Promise});x.then()

我们会根据 then 中回调函数的传入值创建不同类型的Promise, 然后把返回的 Promise 穿透到外层, 以供后续的调用。这里的 x 指的就是内部返回的 Promise,然后在 x 后面可以依次完成链式调用。

这便是返回值穿透的效果。

这两种技术一起作用便可以将深层的嵌套回调写成下面的形式:

readFilePromise('1.json').then(data => {    return readFilePromise('2.json');}).then(data => {    return readFilePromise('3.json');}).then(data => {    return readFilePromise('4.json');});

这样就显得清爽了许多,更重要的是,它更符合人的线性思维模式,开发体验也更好。

两种技术结合产生了链式调用的效果。

这解决的是多层嵌套的问题,那另一个问题,即每次任务执行结束后分别处理成功和失败的情况怎么解决的呢?

Promise采用了错误冒泡的方式。其实很简单理解,我们来看看效果:

readFilePromise('1.json').then(data => {    return readFilePromise('2.json');}).then(data => {    return readFilePromise('3.json');}).then(data => {    return readFilePromise('4.json');}).catch(err => {  // xxx})

这样前面产生的错误会一直向后传递,被catch接收到,就不用频繁地检查错误了。

“Vue Promise如何解决回调地狱问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Vue Promise如何解决回调地狱问题

本文链接: https://www.lsjlt.com/news/348321.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue Promise如何解决回调地狱问题
    本篇内容介绍了“Vue Promise如何解决回调地狱问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题首先,什么是回调地狱:...
    99+
    2023-07-05
  • 一文带你了解promise并解决回调地狱
    目录Promise为什么需要promise需求回调地狱Promise的基本使用promise实例promise的状态promise状态的改变promise的结果promise方法th...
    99+
    2023-05-15
    JavaScript promise回调地狱 回调地狱
  • VuePromise解决回调地狱问题实现方法
    目录问题解决方案问题 首先,什么是回调地狱: 层嵌套的问题。每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。 当一个接口需要依赖另一...
    99+
    2023-01-12
    Vue Promise回调地狱 Vue 回调地狱 Promise回调地狱
  • JavaScript详解使用Promise处理回调地狱与async await修饰符
    目录Promise回调地狱Promise简介Promise简单使用async和await 修饰符小结Promise Promise能够处理异步程序。 回调地狱 JS中或node中,都...
    99+
    2024-04-02
  • 如何使用Promise链式调用解决多个异步回调的问题
    小编给大家分享一下如何使用Promise链式调用解决多个异步回调的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!介绍所谓Promise,简单来说就是一个容器,里面保存着某个未来才会结束...
    99+
    2024-04-02
  • 如何解决vue-resource promise兼容性问题
    这篇文章主要为大家展示了“如何解决vue-resource promise兼容性问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决vue-resourc...
    99+
    2024-04-02
  • javascript回调问题如何解决
    今天小编给大家分享一下javascript回调问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。回调地狱对 Java...
    99+
    2023-07-04
  • Vue-admin-template 报Uncaught (in promise) error问题及解决
    目录Vue-admin-template 报Uncaught (in promise) error问题描述解决问题Vue常见错误解决Vue-admin-template 报Uncau...
    99+
    2024-04-02
  • vue+elementUI下拉框回显问题如何解决
    本文小编为大家详细介绍“vue+elementUI下拉框回显问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue+elementUI下拉框回显问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • JS中promise特点与信任问题如何解决
    这篇文章主要介绍了JS中promise特点与信任问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS中promise特点与信任问题如何解决文章都会有所收获,下面我们一起来看看吧。1.Promise的信...
    99+
    2023-07-02
  • 如何利用WCF回调操作解决死锁问题
    这篇文章主要介绍“如何利用WCF回调操作解决死锁问题”,在日常操作中,相信很多人在如何利用WCF回调操作解决死锁问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何利用WCF回调操作解决死锁问题”的疑惑有所...
    99+
    2023-06-17
  • 如何解决vue跨越问题
    随着Vue在前端开发中的广泛应用,越来越多的开发者也遇到了Vue跨域问题。Vue跨域问题通常是由服务端接口地址与前端网页地址不同域名所导致的。在这篇文章中,我们将探讨Vue跨域问题的原因及解决方法。跨域问题起因跨域问题是由同源策略导致的。同...
    99+
    2023-05-24
  • VUE如何解决跨域问题
    这篇文章主要介绍“VUE如何解决跨域问题”,在日常操作中,相信很多人在VUE如何解决跨域问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VUE如何解决跨域问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • vue中如何解决qs问题
    这篇文章主要介绍“vue中如何解决qs问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue中如何解决qs问题”文章能帮助大家解决问题。什么是查询字符串查询字符串是一个包含在URL中的参数列表,用...
    99+
    2023-07-05
  • fastlane返回401问题如何解决
    fastlane返回401错误通常表示身份验证失败。要解决此问题,您可以尝试以下几种方法:1. 检查您的访问令牌或凭据是否正确,并确...
    99+
    2023-10-08
    fastlane
  • Vue如何解决跨域问题详解
    什么是跨域 跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。 这里列举一个经典的列子: #协议跨域http://a....
    99+
    2024-04-02
  • 如何解决Django+vue跨域问题
    小编给大家分享一下如何解决Django+vue跨域问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!跨域由于开发模式为前后端分离...
    99+
    2024-04-02
  • vue-cli3跨域问题如何解决
    本篇内容介绍了“vue-cli3跨域问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1:将任何未知请求转发到代理服务器如:前端地址...
    99+
    2023-07-04
  • C++如何解决垃圾回收问题
    本篇内容介绍了“C++如何解决垃圾回收问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! C++引用计数...
    99+
    2024-04-02
  • 如何解决SSH连接调试问题
    这篇文章主要介绍了如何解决SSH连接调试问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的防止...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作