Является ли 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

надеюсь, это поможет вам.

Другие вопросы по тегам