#javascript #node.js #asynchronous #async-await #async.js
#javascript #node.js #асинхронный #async-ожидание #async.js
Вопрос:
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 без обратного вызова и ожидаю обещания здесь.
Ожидаемый результат: — [ { имя: ‘john’, id: ‘1’ }, { имя: ‘Andrie’, id: ‘2’ } ] ,
Получен результат :-
[ [ { имя: ‘john’, идентификатор: ‘1’ }, { имя: ‘Andrie’, идентификатор: ‘2’ } ], [ { имя: ‘john’, идентификатор: ‘1’ }, { имя: ‘Andrie’, идентификатор: ‘2’ } ]]
Итак, мой вопрос в том, почему он создает несколько копий массива, как с этим бороться?
Ответ №1:
Вы без необходимости возвращаете вложенный массив, и один и тот же массив ссылается на каждую итерацию, когда все, что вы хотите, это вернуть новый объект.
let data = async.mapLimit(arr, 5, async function (input) {
return { name: input.name, id: input.id };
});
Не уверен, зачем вам нужно, чтобы это было асинхронным
Комментарии:
1. Можете ли вы предоставить несколько руководств по асинхронности, потому что я не могу найти его там, где описана вся информация. Официальные документы не так уж хороши
2. Я никогда не использовал эту библиотеку, но концепция такая же, как у Array#map(), с небольшой разницей для аргумента limit
3. Хорошо, я пройдусь по карте и проверю ее