在 async.map 运行时对数组进行排序

sort array while async.map running

本文关键字:排序 数组 async map 运行时      更新时间:2023-09-26

我使用异步映射来执行函数并为数组中的每个项目获取一些统计信息。

async.map(myarray,myfunc,function(err,res) ...

同时,myarray 可能会通过用户交互进行排序和更改索引。考虑到 myfunc 正在尝试修改数组,这将如何公平。

当你将myarray传递给async.map()时,它会同步创建数组的副本。因此,您可以根据需要修改myarray; async.map()将只对原始数组的副本进行操作并返回一个新数组。尝试运行以下示例:

var array = [1, 2, 3];
function timesTwo(n, done) {
  setTimeout(function() {
    done(null, n * 2);
  }, 2000);
}
$(document).ready(function() {
setTimeout(function() {
  array.pop();
  $('#pop').text(array);
}, 1000);
async.map(array, timesTwo, function(err, result) {
  $('#result').text(result);
  $('#original').text(array);
});
});
span {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/async/1.5.2/async.js"></script>
<p> 0ms: Original array passed to async.map(): <span>1,2,3</span></p>
<p> 1000ms: Pop last item of original array: <span id="pop"></span></p>
<p> 2000ms: Result of async.map(): <span id="result"></span></p>
<p> 2000ms: Original array: <span id="original"></span></p>