Является ли map() в JavaScript синхронным?
Функция:
[1,2,3].map( function (item)
{
console.log(item);
//return 'something';
});
Мое ожидаемое поведение получает только 1 в качестве вывода, если я не раскомментирую
//return 'something'
Но я действительно получаю
1
2
3
Что я делаю неправильно?
ОБНОВИТЬ:
Я тестирую это с помощью nodejs.
Я действительно не понимаю.
var async = require("async");
[1,2,3].map( function (item)
{
console.log(item);
//return 'something';
});
async.map([1,2,3], function (item,callback)
{
console.log(item);
//callback(null,true)
}, function (err,result)
{
console.log(result);
}
);
Оба возвращают одинаковое
1
2
3
И я действительно хотел бы ждать, пока я не получу возврат или обратный вызов, пока не будет выполнен следующий элемент.
РЕШИТЬ
async.mapSeries([1,2,3], function (item,callback)
{
console.log(item);
//callback(null,true)
}, function (err,result)
{
console.log(result);
}
);
это способ сделать это.
2 ответа
Да, карта синхронная.
Это функция более высокого порядка, которая берет новую функцию и применяет ее к данному массиву.
Некоторые люди думают, что потому что они дают функцию в качестве параметра map
тогда он "должен" действовать как функция обратного вызова события, но на самом деле это не так. map
Функция просто применяет параметр функции к массиву и только после его завершения продолжает выполнение результирующего кода после блока карты.
Что касается вашего "ожидаемого поведения" - оно просто не работает, как вы думаете;)
"Метод map() создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве".
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
Обратный вызов вызывается для каждого элемента, ваша логика выполняется, и возвращаемое значение устанавливается как элемент в новом массиве.
Непонятно с вашим ожидаемым поведением, где-то в одном из ваших прошлых удаленных сообщений обнаружилось, что вы используете асинхронную карту.
попробуйте эту ссылку:
http://runnable.com/UyR-6c2DZZ4SmfSh/async-map-example-for-node-js
надеюсь, это поможет вам.