返回顶部
首页 > 资讯 > 前端开发 > JavaScript >VuePromise解决回调地狱问题实现方法
  • 640
分享到

VuePromise解决回调地狱问题实现方法

VuePromise回调地狱Vue回调地狱Promise回调地狱 2023-01-12 18:01:32 640人浏览 薄情痞子
摘要

目录问题解决方案问题 首先,什么是回调地狱: 层嵌套的问题。每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。 当一个接口需要依赖另一

问题

首先,什么是回调地狱:

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

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

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

这两种问题在回调函数时代尤为突出。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解决回调地狱问题实现方法的文章就介绍到这了,更多相关Vue Promise回调地狱内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: VuePromise解决回调地狱问题实现方法

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

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

猜你喜欢
  • VuePromise解决回调地狱问题实现方法
    目录问题解决方案问题 首先,什么是回调地狱: 层嵌套的问题。每种任务的处理结果存在两种可能性(成功或失败),那么需要在每种任务执行结束后分别处理这两种可能性。 当一个接口需要依赖另一...
    99+
    2023-01-12
    Vue Promise回调地狱 Vue 回调地狱 Promise回调地狱
  • Vue Promise如何解决回调地狱问题
    本篇内容介绍了“Vue Promise如何解决回调地狱问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题首先,什么是回调地狱:...
    99+
    2023-07-05
  • 一文带你了解promise并解决回调地狱
    目录Promise为什么需要promise需求回调地狱Promise的基本使用promise实例promise的状态promise状态的改变promise的结果promise方法th...
    99+
    2023-05-15
    JavaScript promise回调地狱 回调地狱
  • javascript回调问题如何解决
    今天小编给大家分享一下javascript回调问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。回调地狱对 Java...
    99+
    2023-07-04
  • .Net回车符问题的解决方法
    今天就跟大家聊聊有关.Net回车符问题的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。有关.net回车符的问题在具体开发的过程中是十分常见的,那么如何解决实际的问题是我们经常...
    99+
    2023-06-17
  • python中显存回收问题解决方法
    目录1.技术背景2.问题复现3.解决思路4.总结概要1.技术背景 笔者在执行一个Jax的任务中,又发现了一个奇怪的问题,就是明明只分配了很小的矩阵空间,但是在多次的任务执行之后,显...
    99+
    2024-04-02
  • IP地址冲突问题及解决方法
    本篇内容主要讲解“IP地址冲突问题及解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“IP地址冲突问题及解决方法”吧!如今许多操作以及工作都在网络上流行,那么我们就要注意网络的应用了。伴随着...
    99+
    2023-06-20
  • springcloud本地调试feign调用出现的诡异404问题及解决
    目录本地调试feign调用出现的诡异404问题问题产生技术框架核心代码诡异的404心态springcloud在本地调试的踩坑记录1、在本地调试的时候2、修改配置文件中关于eureka...
    99+
    2024-04-02
  • Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法
    前言: Fragment也可以使用startActivityForResult方法去打开一个Activity,然后在其onActivityResult方法中处理结果,可是当F...
    99+
    2022-06-06
    方法 回调 fragment 嵌套 Android
  • java高级用法之JNA中的回调问题怎么解决
    今天小编给大家分享一下java高级用法之JNA中的回调问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。简介什么是c...
    99+
    2023-06-30
  • python 回调函数和回调方法的实现分析
    回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事件被触...
    99+
    2022-06-04
    回调 函数 方法
  • Discuz删除回复常见问题及解决方法
    Discuz删除回复常见问题及解决方法 随着社区论坛的发展,Discuz作为一种常用的论坛系统,为用户提供了便捷的交流平台。然而,一些用户在使用Discuz时可能会遇到删除回复的问题,...
    99+
    2024-03-09
    删除 回复 discuz
  • WinXP下IP地址的跟踪问题解决方法
      有时候可能因为工作需要或者电脑遭受攻击等时候需要用上跟踪IP地址,跟踪IP地址有时候是必需的,如果你的网络发生问题或者需要改变些设置的时候,这个东西就派上用场了。不过很多用户在需要解决WinXP操作系统的DHCP故障...
    99+
    2023-06-12
    WinXP IP地址 跟踪 问题 地址 IP
  • 解决Python出现_warn_unsafe_extraction问题的方法
    在Python项目中运行出现了“AttributeError: ResourceManager instance has no attribute ‘_warn_unsafe_extraction'”问题,...
    99+
    2022-06-04
    方法 Python _warn_unsafe_extraction
  • 解决.NET Core企业微信openapi回调地址请求不通过的问题
    1.问题截图  2.测试回调模式成功 测试回调模式地址https://open.work.weixin.qq.com/wwopen/devtool/interface/c...
    99+
    2024-04-02
  • node.js实现回调的方法示例
    本文实例讲述了node.js实现回调的方法。分享给大家供大家参考,具体如下: 向回调函数传递额外的参数 在调用函数中,使用匿名函数中实现需传递的参数,再次匿名函数内调用回调函数。 var events ...
    99+
    2022-06-04
    示例 回调 方法
  • 解决SpringBoot的@DeleteMapping注解的方法不被调用问题
    目录SpringBoot的@DeleteMapping注解的方法不被调用1、前端代码2、服务端代码3、Spring boot源码(重点)4、配置文件SpringBoot开发中常用的注...
    99+
    2023-01-12
    SpringBoot @DeleteMapping注解 @DeleteMapping注解不被调用 SpringBoot注解
  • 解决常见的回流和重绘问题的方法
    常见回流和重绘问题及解决方案,需要具体代码示例 在Web开发中,性能优化是一个重要的话题。回流和重绘是Web页面渲染过程中常遇到的性能问题,它们会导致页面的卡顿和资源浪费。本文将介绍常见的回流和重绘问题,并提供一些解决方案,帮助...
    99+
    2024-01-26
  • Puppeteer解决SEO问题方法
    目录引言什么是Puppeteer解决SEO问题实现方式安装依赖编写后端代码测试后端代码配置Nginx区分搜索引擎和正常用户总结引言 在前端开发中,我们经常会遇到SEO问题,即搜索引...
    99+
    2023-03-19
    Puppeteer SEO解决 Puppeteer SEO
  • 如何利用WCF回调操作解决死锁问题
    这篇文章主要介绍“如何利用WCF回调操作解决死锁问题”,在日常操作中,相信很多人在如何利用WCF回调操作解决死锁问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何利用WCF回调操作解决死锁问题”的疑惑有所...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作