为什么async.map返回数组的多个副本?

问题描述

const async = require('async');

const arr = [
    { name: 'john',id: '1' },{ name: 'Andrie',id: '2' }]

let collectArr = [];
let data = async.mapLimit(arr,5,async function (input) {

    collectArr.push({ name: input.name,id: input.id });
    return collectArr;
})

data.then((result) =>{
    console.log('success',result);
}).catch(e => console.log('err'));

所以在这里,我向async.mapLimit提供了没有回调的数组,并期望在这里做出承诺。 预期的输出:-[{{name:'john',id:'1'},{name:'Andrie',id:'2'}],

获得结果:-

[[{{:'john',id:'1'},{name:'Andrie',id:'2'}], [{name:'john',id:'1'},{name:'Andrie',id:'2'}]]

所以我的问题是为什么要创建多个数组副本,如何处理呢?

解决方法

您不必要地返回一个子数组,而当您只想返回新对象时,每次迭代都引用同一数组。

let data = async.mapLimit(arr,5,async function (input) {
    return { name: input.name,id: input.id };   
});

不确定为什么需要异步