具有异步功能的JavaScript数组

用户名

我在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调用完成。我知道我需要使用回调。但是,我不确定如何以这种方式构造代码。我该怎么做呢?

洛伦佐·五克(Lorenzo Cinque)

使用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/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有异步功能的OracleCommand ExecuteNonQuery

来自分类Dev

具有异步功能的装饰器

来自分类Dev

具有异步功能的意外令牌

来自分类Dev

具有异步功能的非阻塞I / O

来自分类Dev

订阅具有异步功能的可观察序列

来自分类Dev

具有异步功能执行的PySide应用程序

来自分类Dev

具有异步/等待功能的npm mv模块

来自分类Dev

具有异构数组的 JavaScript IndexOf

来自分类Dev

制作具有异步构造函数的对象数组

来自分类Dev

具有异步数据库读取功能的DialogFlow Firebase云功能

来自分类Dev

无法使用 async.each() 异步迭代具有异步块的数组

来自分类Dev

具有异步请求的NodeJS

来自分类Dev

具有异步结构的openxml

来自分类Dev

具有异步/等待的递归setTimeout

来自分类Dev

具有异步/等待的递归setTimeout

来自分类Dev

具有异步/等待的递归setTimeout

来自分类Dev

具有异步请求的递归函数

来自分类Dev

具有异步方法的RxJava for循环?

来自分类Dev

ForEach(内部具有异步功能)完成后的回调

来自分类Dev

从具有异步功能的Node.js模块返回值

来自分类Dev

如何在具有异步功能Swift的循环中使用调度组?

来自分类Dev

使用具有异步功能的CLS运行Jest时出现问题

来自分类Dev

多个工作线程与一个具有异步/等待功能的工作线程

来自分类Dev

具有异步QFileSystemModel的Qt异步显示

来自分类Dev

具有异步委托的异步函数的命名约定

来自分类Dev

完成所有异步Http请求后执行功能

来自分类Dev

NodeJS中没有异步功能的等待如何工作?

来自分类Dev

完成所有异步Http请求后执行功能

来自分类Dev

具有异步计算的Scala不变性(Akka)