js ajax回调 return,js异步回调解决方法

2023-05-16

当一个接口需要依赖另一个接口的请求数据时

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

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

但是当一个接口需要依赖很多个接口的请求数据  或者  一个依赖另一个,另一个再依赖另一个  的情况该怎么解决呢?

当然你可以按照单个接口依赖的方式层层嵌套,结果就是代码结构混乱,可读性差,性能差(一个需要依赖很多个的时候要把很多个设为同步)。

因此,我们需要一种更优雅的异步回调处理方式--Promise

直接上代码:

场景一:先调用getData1,再调用getData2,再调用getData3  ...

//创建一个Promise实例,获取数据。并把数据传递给处理函数resolve和reject。需要注意的是Promise在声明的时候就执行了。

var getData1=new Promise(function(resolve,reject){

$.ajax({

type:"get",

url:"index.aspx",

success:function(data){

if(data.Status=="1"){

resolve(data.ResultJson)//在异步操作成功时调用

}else{

reject(data.ErrMsg);//在异步操作失败时调用

}

}

});

})

var getData2= new Promise(function(resolve,reject){

$.ajax({

type:"get",

url:"index.aspx",

success:function(data){

if(data.Status=="1"){

resolve(data.ResultJson)//在异步操作成功时调用

}else{

reject(data.ErrMsg);//在异步操作失败时调用

}

}

});

})

var getData3=new Promise(function(resolve,reject){

$.ajax({

type:"get",

url:"index.aspx",

success:function(data){

if(data.Status=="1"){

resolve(data.ResultJson)//在异步操作成功时调用

}else{

reject(data.ErrMsg);//在异步操作失败时调用

}

}

});

})

getData1.then(function(res){

return getData2(res)

}).then(function(res){

return getData3(res)

}).then(function(res){

console.log(res)

}).cache(function(error){

console.log(error)

})

场景二:getData3的执行依赖getData1和getData2

//Promise的all方法,等数组中的所有promise对象都完成执行

Promise.all([getData1,getData2]).then(function([ResultJson1,ResultJson2]){

//这里写等这两个ajax都成功返回数据才执行的业务逻辑

getData3()

})

优点:这样的代码分工非常明确,ajax就是拿数据的,.then .catch方法就是处理业务逻辑,代码异常清晰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js ajax回调 return,js异步回调解决方法 的相关文章

  • regex_match

    原型 xff1a bool regex match InputSequence MatchResults Regex Flags 当模式匹配整个输入序列成功时 xff0c 返回的是true 否则返回false 参数说明 1 InputSeq
  • 关于Docker目录挂载的总结

    Docker容器启动的时候 xff0c 如果要挂载宿主机的一个目录 xff0c 可以用 v参数指定 譬如我要启动一个centos容器 xff0c 宿主机的 test目录挂载到容器的 soft目录 xff0c 可通过以下方式指定 xff1a
  • Wireshark网络抓包(一)——数据包、着色规则和提示

    一 数据包详细信息 Packet Details面板内容如下 xff0c 主要用于分析封包的详细信息 帧 xff1a 物理层 链路层 包 xff1a 网络层 段 xff1a 传输层 应用层 1 xff09 Frame 物理层数据帧概况 2
  • FloatingWindow 悬浮窗开源项目总结

    在Android开发中 xff0c 我们不免会遇到悬浮窗展示的需求 xff0c 以下是本人之前star的悬浮窗的开源项目 xff0c 供大家参考 xff1a 一 FloatingWindowDemo 开源项目地址 xff1a https g
  • yum-config-manager的讲解

    问题描述 xff1a yum是RPM的前端程序 xff0c 对于多软件安装时非常好用 xff0c 在虚拟机中想要安装什么软件都可以使用 yum install xff1a 仓库名 命令来快速调用已经安装的仓库里的软件 xff0c 但有时在安
  • 1024与自己做爱做的事情

    1024是什么 xff1f 1024最早起源于一个名为 草榴社区 的论坛 xff0c 该论坛为了防止灌水 xff0c 新用户在论坛内回复与发帖时 xff0c 被限制为 每隔1024秒才可发帖 xff08 回复 xff09 一次 xff0c
  • Nervos CKB 共识协议 NC-Max:突破 Nakamoto Consensus 吞吐量的极限

    带宽实际上是区块链吞吐量的最大限制 xff0c 在美国旧金山举办的 Scaling Bitcoin Meetup 中 xff0c Nervos amp Cryptape 研究员张韧从 带宽利用率 角度分析了诸多共识协议的效率和可行性 Alg
  • ES6: import和export

    模块化 前端模块化的好处都已经被说烂了 xff0c 归纳为两点 xff1a 避免全局变量污染有效的处理依赖关系 ES2015 xff08 ES6 xff09 终于引入了模块的概念 xff0c 最近学习了下 xff0c 顺便记下笔记 准备工作
  • 6个常见校园网认证客户端故障原因及解决方法

    故障 一 xff1a 本地连接打叉或受限制 xff1b 客户端 提示 无法获取IP信息 可能原因 1 xff0e 网线虚接 2 xff0e 学生端网络 跳线质量太差 3 xff0e 网卡 或网卡驱动程序过久 4 xff0e 交换机的某个端口
  • C语言编程 求两个数的平均值方法(三种方法)

    第一种方法是最常见的 average 61 xff08 a 43 b xff09 2这种方式 xff0c 求两个数的平均值 第二种方法是 当 a lt b 时 averag 61 a 43 b a 2 这里着重介绍的是第三种方法 avera
  • IDEA创建GIT分支并提交到其他分支

    1 xff0c 创建分支 2 xff0c 提交自己的分支 3 xff0c 写代码 xff0c 写完之后切换到你想要提交的分支 xff0c 例子develop 切花分支 xff0c 选择分支 xff0c checkOut 4 下载该分支的更新
  • 【C#学习笔记】写文件

    using System using System IO namespace ConsoleApplication class Program static void Main string args FileStream file 61
  • socket编程——一个简单的例子(转)

    原文地址 xff1a http blog csdn net wind19 article details 6156339 从一个简单的使用TCP例子开始socket编程 xff0c 其基本步骤如下 xff1a server client 4
  • BI 多维数据 处理错误

    哎 响应中的错误和警告 后端数据库访问模块中存在错误 OLE DB 报告列 11 出现了数据类型溢出现象 OLAP 存储引擎中存在错误 处理 Fact Order Sales 分区时出错 xff0c 该分区属于 Analysis 数据库的
  • AutoLISPDCL各种控件

    AutoLISP对话框DCL一共包括23个常用控件和8个固定控件 xff0c 每种控件属于一种类型 xff0c 创建一个DCL对话框窗体就是创建各种控件实例的过程 xff0c 控件是各种属性 事件 方法的集合 按照各种控件的特点 xff0c
  • 完整克隆、链接克隆

    在VMware中安装虚拟主机时 xff0c 若想简便快速的部署多台虚拟主机 xff0c 可先配置一台虚拟主机的一些基础设置 xff0c 然后通过 34 克隆 34 的方式快速部署 而 34 克隆 34 又分为完整克隆和链接克隆 xff1a
  • 急求mapx控件下载!!!

    急求mapx控件下载 Delphi Windows SDK API http www delphi2007 net DelphiMultimedia html delphi 2006121723132453 html 刚刚在网上搜了好久 没
  • 【Android】Mac安装EasyTether导致无法识别设备的问题

    正文 想让手机走PC网络 xff0c 然后抓包 xff0c 于是搜索一番后安装了一个叫EasyTether的软件 还没来得及测试 xff0c 就忙着写代码去了 xff0c 重启MAC以后就发现连不上手机了 xff0c 一开始并没有怀疑是 E
  • C# 操作PDF

    Spire PDF组件概述 Spire PDF是一个专业的PDF组件 xff0c 用于在 NET应用程序中创建 xff0c 编辑 xff0c 处理和阅读PDF文档 支持丰富的PDF文档处理操作 xff0c 如PDF文档合并 拆分 转换 xf
  • 液晶显示器面板型号速查[转贴]

    原文链接 xff1a http itbbs pconline com cn topic jsp tid 61 3132291 生产厂家 显示器型号 61 面板尺寸 面板类型 xff08 面板制造商和面板型号 xff09 例 xff1a 比如

随机推荐