LINUX.ORG.RU

nodejs вопрос по callback

 ,


0

1

Привет! Что то затупил на ровном месте ))
есть массив элементов
var items = [obj1, obj2...]
Эти элементы имеют функцию getState(), которая возвращает их текущее состояние и принимает в качестве аргумента callback

Есть функция, которая запрашивает этот массив элементов, но прежде чем его вернуть, я хочу проверить состояние всех элементов и вернуть уже с этой информацией

var items = [obj1, obj2...]

function getAll(){
    items.forEach(function(obj){
       obj.getState(function(state){
          obj.state = state;
       })
    })
    
    return items;
}

getAll();


Но этот код вернет все тот же массив

★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Т.е. нужно узнать когда все колбеки сработают. Можно конечно счетчик сделать после каждого срабатывания и когда он будет равен количеству массива вызывать функцию результатирующую, но это как то криво мне кажется, может есть более изящный способ?

gobot ★★★★
() автор топика

попробуй вместо forEach map или reduce

mystery ★★
()

Если я правильно понял, то нужен map.

Qwentor ★★★★★
()
Ответ на: комментарий от gobot
return Promise.all(items.map(function(item){
            return item.getState();
        })).then(function(){
           callback();
        })
gobot ★★★★
() автор топика
Ответ на: комментарий от trashymichael

Сейчас актуальнее co + yield. Async - это когда совсем нет выбора и обязательно использовать именно колбеки.

У меня по мере причесывания кода async из зависимостей совсем ушел.

Vit ★★★★★
()
Ответ на: комментарий от trashymichael

А че за проект то у него? Я чет глянул, какие то там закорючки, кому это нужно вообще? Мож поциэнт болен?

anonymous
()
Ответ на: комментарий от anonymous

опенсорц форумный движок на ноде, еще с мохнатых ее версий

trashymichael ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.