具有异步函数的 JavaScript 数组

2024-04-26

我有一个 JavaScript 字符串数组。该数组的定义如下:

var myArray = [];
myArray.push('1');
myArray.push('2');
myArray.push('3');

我需要循环遍历数组并调用异步运行的函数。该函数如下所示:

function myAsyncFunction(id, callback) {
  $.ajax({
    url: '/api/items', 
    data: { 'id':id },
    type: 'POST',
    dataType: 'text',
    success: function(result) {
      if (callback) {
        callback();
      }
    }, error: function() {
      if (callback) {
        callback();
      }
    }
}

我试图迭代数组中的所有项目,并计算出运行所有项目需要多长时间。我想做这样的事情:

var startTime = new Date();
for (var i=0; i<myArray.length; i++) {
  myAsyncFunction(myArray[i]);  
}
var duration = new Date() - startTime;

显然,上面的代码不起作用,因为它在移动到数组中的下一项之前不会等待 ajax 调用完成。我知道我需要使用回调。但是,我不确定如何以这种方式构建我的代码。我该怎么做呢?


使用 Promise 并执行如下操作:

var myArray = [1, 2, 3];
var promises = [];
var startTime = new Date();
var duration;

for (var i = 0, len = myArray.length; i < len; i++) {
    var def = $.Deferred();
    promises.push(def);

    (function(i) {
        $.ajax({
            url: '/api/items', 
            data: { 'id':myArray[i] },
            type: 'POST',
            dataType: 'text'
        }).done(function() {
            promises[i].resolve();
        });
    })(i);
}

$.when.apply($, promises).done(function() {
    duration = new Date() - startTime;
    console.log(duration);
});

我没有测试过,但我认为它可以通过一些调整很好地工作:)
我认为使用计数器的解决方案在某些情况下可能会失败。

编辑:它有效http://jsfiddle.net/0u21jwxv/ http://jsfiddle.net/0u21jwxv/

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

具有异步函数的 JavaScript 数组 的相关文章

  • 如何使用 java/vb 脚本调用自定义 ActiveX dll 中的方法

    我使用 VB6 创建了一个 ActiveX dll 并使用打包和部署向导将其打包 生成了一个 cab 文件和一个演示 HTML 页面 此 ActiveX dll 包含一个 simgle 方法 该方法返回字符串且不接受任何参数 我遇到的麻烦是
  • 从 JavaScript 中 Firebase 数据库的查询结果中获取特定子项的值

    我在 Firebase 上有这个示例数据库 样本数据库 我有一个index html 其中有这两个输入文本 div class login form h2 Login Form h2 div
  • 运行 npm install 时出错 Error: 404 Not Found: 7zip-bin@~4.1.0

    当我运行 npm install 时 我看到此错误 3 verbose stack Error 404 Not Found 7zip bin 4 1 0 2293 verbose stack at fetch then res C cygw
  • 从字符串中删除货币符号并使用 Javascript 中的单行转换为数字

    我下面有一个字符串 它是以英镑为单位的价格 我想删除货币符号 然后将其转换为我可以用来与另一个值进行比较的数字 价格 例如 X gt Y 14 50 我之前已将字符串转换为用于货币的数字 var priceNum parseFloat pr
  • javascript获取上周的第一天和最后一天[重复]

    这个问题在这里已经有答案了 我想用 javascript 获取上周的第一天 星期一 和最后一天 星期日 我已经检查过其他主题 但它不起作用 我还需要处理前一周是否是两个不同的月份 我正在使用此代码 但最后一个星期日是 06 03 2014
  • 这个特定的 ReactJs 代码是如何执行的初学者问题?

    我是初学者 正在阅读大量代码 现在我想知道下面的代码我明白这段代码在做什么 我需要澄清的是代码流程 当我运行它时 我看到图像正在加载 React 是从上到下执行代码吗 占位符图像异步获得正确的图像 但会App如果需要时间 组件会开始渲染但没
  • npm 脚本:node-sass 不监视部分 sass 文件

    我有这个项目结构 src assets css sass main scss variables scss 我正在尝试编写一个 npm 脚本 该脚本将监视我的所有 scss 文件 包括部分文件 中的更改 然后仅编译我的 main scss
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?

    有人可以解释 angular copy 和 JSON parse JSON stringify 之间的区别吗 有吗 您会推荐使用什么 angular fromJson angular toJson 与 JSON parse JSON str
  • jquery/javascript 处理后移至命名锚点

    在进行一些 jquery 处理后 如何将焦点移动到同一页面上的不同部分 名为锚点 函数 ABC 进行一些处理 然后 我需要将用户移动到同一页面上的某个部分 页面下方 您可以使用下面的代码将屏幕滚动到 div 只需更改选择器以匹配您要滚动到的
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • 在 AngularJS 中覆盖运行时的依赖关系

    我有一个服务叫 doggedHttp 它公开了与 http 现在我想创建一个 doggedResource服务是有角度的 resource服务之上 doggedHttp代替 http 换句话说我想注入 doggedHttp as the h
  • 在 NPM 上捆绑并发布客户端 Web 代码

    我制作了一个 JavaScript 文件 假设它的内容是这样的 let myCoolAlert str gt alert str in a different js file SO doesn t allow you to cross fi
  • Node.js 和 Express:异步操作后如何返回响应

    我是 Node js 新手 所以我仍然对异步函数和回调很感兴趣 我现在的难题是如何在异步操作中从文件读取数据后返回响应 我的理解是发送回复的工作方式如下 这对我有用 app get search function req res res s
  • RxJS - 从可观察对象中获取最后 n 个元素

    我想从可观察对象中获取最后 3 个元素 假设我的时间线是这样的 a b c d e f g h i j gt where a b c d e f g h i j are emitted values 每当发出新值时 我想立即获取它 因此它可
  • Firefox OS 后台服务

    我想构建一个应用程序 用户可以通过它输入一些设置 并且应用程序将启动后台服务来根据这些设置执行一些任务 我只想在模拟器中运行应用程序和后台服务 我知道它需要 认证 模式才能运行后台服务 但我现在不考虑在 Firefox Marketplac
  • 在javascript中定义Date.parse的格式[重复]

    这个问题在这里已经有答案了 我正在使用 Date parse 将字符串转换为 JavaScript 中的日期 但是 如果字符串看起来像 10 11 2016 它会被解释为 2016 年 10 月 11 日 我需要将其解释为 2016 年 1
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • Safari 的 Javascript 与 document.write 的问题

    我的问题只发生在 Safari 上 IE FF Chrome 和 Opera 都可以完美运行 我正在向 DOM 添加一个对象 与 YouTube 的方式完全相同 具体取决于 ActiveX 或 NPAPI 因此在确定写入对象类型后 我通过以
  • JavaScript 右移负数

    这是片段 var i 101 console log 101 i toString 2 console log 101 gt gt 1 i gt gt 1 toString 2 var l 101 console log 101 l toS

随机推荐

  • 如何在Vista下使用WIA 1进行开发?

    我在Vista SP1下使用VS2008 SP1 我的 Net 程序使用对 WIA Microsoft Windows 图像采集库 v2 0 的 COM 引用 我正在使用 CommonDialogClass ShowAcquireImage
  • C/C++ 中的双向链表与多链表 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 双链表和多链表有什么区别 在 C C 程序的帮助下会更好地解释我 定义 A 多链表是一个链表 其中每个节点可以包含指向链表的多个节点的
  • PHP 解析包含

    我包括一个文件init php它定义路径常量 所以如果我包括init php在一个文件中 索引 php 然后在另一个文件中 布局 header php is init php在添加到这些文件之前进行解析 还是添加到父文件中 然后将父文件作为
  • 将数据显示为网络应用程序热图的世界地图[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何工具包 库可以生成世界地图并在热图视图中叠加数据 例如 Google 上的工具包 库 我需要能够在本地生成和显示地图 而不是通过
  • 在 bourne shell 中的用户定义函数中使用 getopts

    是否可以将命令行参数从 bourne 脚本内传递到函数中 以便允许 getopts 处理它们 我的脚本的其余部分很好地打包到函数中 但开始看起来我必须将参数处理移至主逻辑中 现在是这样写的 但是不行 processArgs while ge
  • 使用 CTE 以及开始和结束日期时间避免日期时间间隔中的间隙

    由于某种原因 我发现使用此查询的时间间隔存在间隙 我只使用基本数据就可以正常工作 但是 当连接表并指定 WHERE 子句时 我发现时间间隔存在间隙 我还需要将 S SessionEndTime 合并到我的时间间隔中 以查找 Response
  • 设置 blob 的内容类型

    我们正在转移一个Blob 图片 下载一个 websocket 并将其渲染到另一端的画布上 当我使用createObjectURL对于斑点 我收到以下警告 Resource interpreted as Image but transferr
  • Rails form_for 选择已选择选项的标签

    我正在使用 form for 来更新用户个人资料 作为表单的一部分 我使用选择菜单 菜单由数组填充 即 STATUS Active active In Active inactive 然后在表格中 虽然这项工作没有选择之前在编辑时选择的选项
  • querySelector 中哪些字符需要转义?

    根据这里的文档 https developer mozilla org en US docs Web API document querySelector Notes https developer mozilla org en US do
  • 如何用Java编写某些语法的LALR解析器?

    我想编写 Java 代码来为我的语法构建 LALR 解析器 有人可以推荐一些书籍或一些链接 让我可以学习如何为 LALR 解析器编写 Java 代码吗 手动编写 LALR 解析器很困难 但他可以做到 如果您想了解手动构建解析器背后的理论 请
  • CodeIgniter - 自动加载

    我想知道 CodeIgniter 自动加载的最佳实践是什么 自动加载我的所有内容是不是不好的做法might是否曾经需要过 或者可以这样做吗 这会给应用程序带来更多负载吗 目前 我只是自动加载我将在整个应用程序中使用的库和助手 autoloa
  • MySQL 视图:在另一个计算字段中引用一个计算字段(按名称)

    例如 如何定义具有两个计算字段的视图 TableName BlueSquares TableName RedSquares AS TotalSquares TableName BlueCirles TableName RedCircles
  • 如何从一个Android应用程序调用另一个Android应用程序

    我想从另一个应用程序调用一个 Android 应用程序 我尝试过一些examples http www anddev org install run applications from within another application
  • 使用 JsonView 将 POJO 转换为 JsonNode

    我正在编写一个典型的 Play Framework 应用程序 我想使用 Jackson 从控制器的方法返回 JsonNode 这就是我现在正在做的 public static Result foo MyPojoType myPojo new
  • 如何禁用 moment.js 夏令时时区转换

    可以在 moment js 中禁用日光时区转换吗 http plnkr co edit MjFelt p preview http plnkr co edit MjFelt p preview scope obj date moment 2
  • 如何检查 Mypy `# type:ignore` 注释是否仍然有效且必需?

    想象一下 我们有一些巨大的遗留代码库 其中有很多文件被忽略了 Mypy 警告 def foobar x some external class some method 0 type ignore ignore some mypy warni
  • spring boot应用程序在ec2上自动关闭

    我在 ec2 上部署了 springboot 应用程序 ubuntu 为 t2 medium 大小 AWS AMI 为 t3 medium 大小 在我的本地电脑上 没有问题 但在 ec2 上 几个小时后 在我不工作期间 它自己死了 我只是想
  • 模块“pandas”没有属性“read_csv”

    import pandas as pd df pd read csv FBI CRIME11 csv print df head 运行这个简单的代码会出现错误 Traceback most recent call last File C U
  • 当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

    Both static cast and reinterpret cast似乎适合铸造void 到另一个指针类型 是否有充分的理由偏爱其中之一 Use static cast 这是最精确的转换 准确地描述了此处进行的转换 有一个误解 认为使
  • 具有异步函数的 JavaScript 数组

    我有一个 JavaScript 字符串数组 该数组的定义如下 var myArray myArray push 1 myArray push 2 myArray push 3 我需要循环遍历数组并调用异步运行的函数 该函数如下所示 func