具有异步函数的JavaScript数组

具有异步函数的JavaScript数组,javascript,arrays,asynchronous,Javascript,Arrays,Asynchronous,我有一个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',

我有一个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;
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);
});
我试图遍历数组中的所有项,并计算出运行所有项所需的时间。我想这样做:

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;
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);
});
var startTime=new Date();

对于(var i=0;i记录您将拨打多少个电话

var callCount = myArray.length;
然后,在回调中检查它是否是最后一个

success: function(result) {
      callCount--;
      if(callCount == 0){
          var duration = new Date() - startTime;
      }
}

为此,请尝试使用
计数器
。计数器值为
0
后,查找持续时间

var startTime=new Date();
var counter=myArray.length;//计数器

对于(var i=0;i使用Promise并执行以下操作:

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;
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);
});
var myArray=[1,2,3];
var承诺=[];
var startTime=新日期();
var持续时间;
for(var i=0,len=myArray.length;i
我还没有测试过,但我认为它可以很好地适应:)
我认为在某些情况下,使用计数器的解决方案可能会失败


编辑:有效

如果没有一个答案有效或者您面临问题,请告诉我,以便我能提供帮助