如何使用 Javascript Promise 按顺序执行 AJAX 调用

2024-06-28

我正在循环访问地图,我想使用每个地图值作为参数进行单独的 AJAX 调用,以获取一些数据并记录它。见下文。这是可行的,但我想让 AJAX 调用按照地图的顺序进行。因为每次调用都是异步的,所以看来我应该使用 Promise 来实现按顺序执行。但我对承诺很陌生,并且真的不知道如何在这里做到这一点。我在这里的其他地方看过但找不到任何东西。请帮忙。

map.forEach(function(url, key) {
   log(url);
});

function log(url) {
    $.ajax({
      url: url, 
      dataType: 'json',
      success: function (result) {
          console.log(result.value);
          console.log(result.name);
          console.log(result.action);
      }
  });
}

由于 $.ajax 返回一个 Promise,因此您可以使用 Promise 链来实现您想要的

var p = $.when();
map.forEach(function(url, key) {
    p = p.then(function() { 
        return log(url);
    });
});

function log(url) {
    return $.ajax({
        url: url, 
        dataType: 'json',
        success: function (result) {
            console.log(result.value);
            console.log(result.name);
            console.log(result.action);
        }
    });
}

注意:上面的代码仅使用 jQuery,没有原生承诺

或者使用Array的reduce函数

map.reduce(function(p, url) {
    return p.then(function() { 
        return log(url);
    });
}, $.when());

如果你可以使用 ES2015+,那么就有原生的 Promises,

map.reduce((p, url) => p.then(() => log(url)), Promise.resolve());

如果你愿意,你也可以这样做

function log(url) {
    return $.ajax({
        url: url, 
        dataType: 'json'
    });
}

map.reduce((p, url) => p.then(results => log(url).then(result => results.concat(result))), Promise.resolve([]))
.then(results => {
    results.forEach(result => {
        console.log(result.value);
        console.log(result.name);
        console.log(result.action);
    })
});

区别在于,一旦最后一个请求完成,所有 console.log 都会发生(如果任何失败,则不会发生任何控制台日志)

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

如何使用 Javascript Promise 按顺序执行 AJAX 调用 的相关文章

  • JavaScript:所有标准内置对象实际上都是构造函数吗?

    我最近一直在研究 JavaScript 在花了几个月的时间之后 我仍然对一些内部结构感到困惑 具体来说 我试图理解所谓的标准内置对象 https developer mozilla org en US docs Web JavaScript
  • 如何告诉 Sonar 使用我的可靠报告来获取单元测试结果

    我们有一个 Jenkins 作业 其中包含一堆 javascript 文件 我们通过 grunt 构建项目 并在构建结束时运行 JSCover 来运行单元测试并收集代码覆盖率 这一切都有效 我们得到了一个不错的 LCOV 文件 并且在 ta
  • 在 NodeJs 中使用 Jest 模拟 Http Post 请求

    我有一个使用本机 https request 使用 Azure Function 内的 Node Js 构建的外部 POST API 一切正常 现在我正在尝试构建单元测试用例 并对模拟 Request 方法感到震惊 回调响应具有 on 功能
  • 将 Babel 与单个输出文件和 ES6 模块一起使用

    这是我的 gulp 任务 将 ES6 代码编译成单个 ES5 文件 我使用类和模块 import export 在 ES6 中 gulp src paths scripts pipe sourcemaps init pipe babel p
  • JavaScript 回调的效率

    我只是想证实我的一个怀疑 我偶然发现了一篇文章 建议按以下方式使用 Socket io var app require express createServer var io require socket io listen app app
  • JavaScript - babel-preset-env 不为 IE11 转换箭头函数

    我很难尝试配置 Babel 来转译 IE11 可以理解的代码 特别是箭头函数 跑步npx webpack mode development使用我的配置不会转换我的代码中的箭头函数 在eval 在生成的代码中的语句中 我可以看到所有实例都未转
  • Google 闭包编译器使用 WebStorm

    我喜欢用谷歌闭包编译器 https developers google com closure compiler in WebStorm https www jetbrains com webstorm 我已经通过 npm 下载了它 npm
  • onclick链接/按钮获取数据属性值

    span class btn btn block btn inverse btn icon glyphicons home i i Daily span span class btn btn block btn inverse btn ic
  • Django 管理中的自定义依赖下拉菜单

    我有一个按阶段模型的项目外键 我很难在 Django 管理页面中创建依赖的下拉列表 我想当用户从该项目的 项目下拉 阶段选择一个项目时 在第二个下拉菜单中显示 实现这一目标的最佳方法是什么 如果下拉列表根据其父级的值来过滤项目 那就太好了
  • td 内的文本可以随 td 一起调整大小吗? (是其高度的百分比?)

    我有一个 100 占屏幕的表格 里面有 3x3 9 个单元格 每个单元格占 33 到目前为止 一切都很好 这是一个干净 可扩展的井字棋游戏 问题在于 TD 内的文本不会随比例缩放 有没有办法说 我希望文本大小为 TD 高度的 30 或者其他
  • jQuery 分钟和秒倒计时器

    我想创建一个 jquery 倒计时器 我尝试了以下代码 但它不起作用 我该怎么办 DEMO https jsfiddle net tbosn210 https jsfiddle net tbosn210 var interval setIn
  • 如何在从数据库异步加载中用占位符替换不存在的图像

    我有一个包含图像的数据库 我需要根据用户的请求即时加载这些图像 这些图像将作为包含 div 容器中的单独 s 的背景图像 类似于图像滚动条 该数据库当前是本地数据库 但这不是我的问题 问题是数据库可能没有我请求的所有图像 并且我可能会得到一
  • Firefox 本地主机上的 Twilio 屏幕共享?

    目前 Firefox 中本地主机上的屏幕共享会引发以下错误 The request is not allowed by the user agent or the platform in the current context 这是我的代码
  • getCompatedStyle 类似于 IE8 的 javascript 函数

    我正在尝试在 Java GWT 代码中编写一个 Javascript 函数 该函数获取以下样式的值 direction fontFamily fontSize fontSizeAdjust fontStyle fontWeight lett
  • 当 JavaScript 抛出异常时不要停止它

    我正在使用 JavaScript 编写一个 Windows 边栏小工具 现在我想捕获所有 JavaScript 异常并将其记录到文本文件中 一个问题是 当任何一行抛出异常时 下一行将不会被执行 是否可以自动捕获异常 以便执行以下 JavaS
  • 如何捕获 google 地图的无效 API 密钥

    我有这个代码 如果密钥无效 则会弹出警报 但我想在这种情况下执行一些操作 但我不知道如何连接它 有任何想法吗 Google 不提供检查 Google 地图 API 密钥的外部方法 因此 您无法使用例如查询某些服务 此代码有效吗abcde12
  • React Native:当您的应用程序关闭时是否有回调函数?

    我有一个 setInterval 即使您关闭 而不是退出 应用程序也会继续运行 我想在我的应用程序关闭或设备进入睡眠状态时调用一个函数 以便清除 setInterval AppState 是你的朋友 看看AppState 的文档 https
  • 离子选择:预选值在单击一次之前是不可见的

    我刚刚在 ionic 版本 6 中创建了一个 ion select 我的问题是 我在页面加载时已成功预选了一个值 但此预选值未显示在 UI 中 它只是在我单击选择之后出现 但在它没有出现之前 如图 2 所示 我在 ionViewWillEn
  • JQuery 循环遍历动态元素并获取数据值

    我正在尝试使用可折叠面板来完成我的要求 sport on click function var thisId this attr id var thisChildren this sportlist thisChildren each fu
  • 如何将 JSLint 用于依赖于 JQuery 的代码段?

    我对 Javascript 比较陌生 我想通过 JSLint 运行我周末玩的那段代码 这样它就可以指出我在哪里是个十足的白痴 不幸的是 我收到了大量关于缺少函数声明的错误 这些函数声明是 JQuery javascript 库及其各种插件的

随机推荐

  • ARKit:如何判断用户的脸部是否与相机平行

    In my Swift ARKit SceneKit项目中 我需要判断前置摄像头中用户的脸部是否与摄像头平行 我能够通过比较左眼和右眼的距离来判断水平平行 使用faceAnchor leftEyeTransform和worldPositio
  • 从 Unity 中的另一个脚本调用 IEnumerator 方法并获取其返回值

    我正在使用 Unity 开发一个项目 我有这个文件 API cs 不附加到任何游戏对象 using UnityEngine using UnityEngine Networking using System Collections usin
  • 文件上传进度条[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 上传进度条 https stackoverflow com questions 849237 upload progress bar in php 任何人都可以建议一种在上传文件时包含文件上传
  • XMLHttpRequest.send 因相对路径而失败

    我在某些可能可以补救的事情上遇到了困难 我正在开发一个没有服务器的网站 这样做时 我在尝试通过 XMLHttpRequest 访问文件时遇到了问题 正如您在示例代码片段中看到的 我创建了变量 使用所需文件的相对路径打开它 然后使用发送函数
  • 如何在烧瓶模板中模拟“current_user”?

    我想嘲笑flask login s current user在模板渲染下 该函数返回当前登录的用户 现在我正在嘲笑AnnonymousUserMixin from flask login如果用户未经过身份验证 则默认返回该值 但这会导致各种
  • 一对多关系:使用 JPA 2.0 更新已删除的子项

    我有双向一对多关系 0 or 1 client 0 个或多个列表产品订单 应在两个实体上设置或取消设置该关系 在客户端 我想设置分配给客户端的产品订单列表 然后应将客户端设置 取消设置为自动选择的订单 在产品订单方面 我想设置分配订单的客户
  • 在 ConEMU 中显示 git 分支

    有没有办法在 ConEmu 中以视觉方式 背景或类似 在 git 中显示分支 Git 分支可以在普通的 cmd 或 Far Manager 提示符中可见 所有魔法都是通过特殊的 ANSI 序列完成的 必须选中 Inject ConEmuHk
  • 获取当前 IP 地址 Xamarin.Forms(跨平台)

    如何获取 Xamarin Forms 跨平台 的当前 IP 地址 WifiManager 我无法使用并且 WifiManager 不能包含吗 public string MyIp foreach IPAddress adress in Dn
  • 如何在UIViewController中设置parentViewController?

    UIViewController 的parentViewController 属性是只读的 但我正在嵌套自定义视图控制器并希望使用此属性 但是 由于它是只读的 并且我没有找到其他方法来设置此属性 我的问题是 如何do我设置的 显然 UINa
  • 我可以在我的应用程序中使用 Whatsapp 发送消息吗

    我想在我的应用程序中使用 Whatsapp 向其他手机发送消息 我在 Github 上看到过这个用于 Whatsapp 的公共 API here https github com venomous0x WhatsAPI 但我没有找到 iOS
  • 这是服务的实际用途吗?

    我需要运行一个在后台处理钩子的应用程序 问题是我必须以管理员身份在系统启动时自动启动它 我尝试使用 Windows 任务计划程序 但在某些系统上它不会以管理员身份启动程序 这会导致奇怪的行为 我从未编写过 Windows 服务 但这是否是创
  • 在 heatmap.2 中将行标签设置为斜体

    我正在尝试使用 R 函数将行标签设置为斜体heatmap 2 没有默认选项 我无法通过设置找到解决方法par font 3 例如 如何将行标签设置为斜体heatmap 2 set seed 123 data matrix sample 10
  • 有没有办法让两张纸保持同步?

    无法仅共享 Google 文档中的一张电子表格 因此 您必须共享整个电子表格 因此 我正在考虑编写一个脚本来同步两个工作表 每个工作表位于不同的电子表格中 我想使用一个函数来获取行作为数组来做到这一点 有更好的策略来做到这一点吗 实现此目的
  • 响应式图像对齐中心 bootstrap 3

    我使用 Bootstrap 3 制作目录 当在平板电脑上显示时 产品图像看起来很难看 因为它们的尺寸较小 500x500 并且在浏览器中的宽度为 767 像素 我想将图像放在屏幕中央 但由于某种原因我不能 谁来帮忙解决问题 有 center
  • 从辅助类将输出写入控制台

    我有一个运行帮助程序类的控制台命令 我想用以下命令编写输出 this gt info 从助手类到控制台 我的代码如下所示 App Http Console Commands SomeCommand php function handle H
  • 将 CSS 应用于括号(圆括号)中的段落中的单词

    各位 情况是这样的 中的话 span 元素来自资源键 括号内的 CSS 需要略有不同 例如 span Hello this a wonderful resource I mean it span 现在的要求是 我的意思是 应该比其他单词的字
  • 使用 SQL 函数在 ActiveRecord 中进行插入/更新

    我想在我的 Rails 应用程序中存储 IP 地址 v4 和 v6 我已经安装了MySQL 的扩展 http labs watchmouse com 2009 10 extending mysql 5 with ipv6 functions
  • 声明日期,然后添加下一个工作日

    我没有得到我需要的结果 我想做的就是声明我的日期 然后添加下一个工作日 IE CASHDATE 1 这有效 但我需要下一个工作日是 5 号 DECLARE CASHDATE DATETIME SET CASHDATE 2016 12 02
  • Shutil.copytree 没有文件

    我正在尝试使用shutil copytree shutil copytree SOURCE DIR TARGET DIR ignore None 此副本也文件在文件夹中 我只需要复制没有任何文件的文件夹 怎么做 您可以通过提供 忽略 功能来
  • 如何使用 Javascript Promise 按顺序执行 AJAX 调用

    我正在循环访问地图 我想使用每个地图值作为参数进行单独的 AJAX 调用 以获取一些数据并记录它 见下文 这是可行的 但我想让 AJAX 调用按照地图的顺序进行 因为每次调用都是异步的 所以看来我应该使用 Promise 来实现按顺序执行