我使用异步映射来执行一个函数并为数组中的每个项获取一些统计信息。
async.map(myarray,myfunc,function(err,res) ...
同时, myarray 可能会按用户交互排序并更改索引。考虑到 myfunc 正在尝试修改数组,这是多么公平。
答案 0 :(得分:0)
当您将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>