Существует ли чисто основанный на Promise подход для сопоставления / объединения коллекций?

Асинхронный против Q вообще я

я изучаю разработку Node.js и пытаюсь обдумать стратегии управления асинхроннымобратный вызов ада ", Две основные стратегии, которые ямы исследовали Колана МакМахонаасинхронной модуль, и Крис Ковальна основе обещаний Q модуль.

подобномного других людейЯЯ все еще пытаюсь понять, когда вы должны использовать одно против другого. Однако, вообще говоря, я нашел обещания и основанный на Q коднемного более интуитивно, поэтому я двигался в этом направлении.

Отображение / объединение коллекций в целом

Однако я'Я все еще застрял с помощью асинхронного модуляфункции для управления коллекциями, Исходя из Java и Python, в большинстве случаев, когда я работаю с коллекцией, логика выглядит следующим образом:

Инициализируйте новую пустую коллекцию, в которой будут храниться результаты.Выполните цикл for-each со старой коллекцией, применив некоторую логику к каждому элементу и поместив его результат в новую пустую коллекцию.Когда цикл for-each заканчивается, переходите к использованию новой коллекции.

В клиентском JavaScript ямы привыкли к использованию jQuery'sфункция map ()... передавая логику этого шага № 2 и получая результат шага № 3 в качестве возвращаемого значения. По ощущениям тот же базовый подход.

Отображение / объединение коллекций с асинхронным и Q

Асинхронный модуль на стороне узла имеет аналогичныйкарта а такжеCONCAT функции, но они неt вернуть объединенный результат обратно на исходный уровень контекста. Вместо этого вы должны спуститься в ад обратного вызова, чтобы использовать результат. Пример:

var deferred = Q.defer();

...

var entries = [???]; // some array of objects with "id" attributes

async.concat(entries, function (entry, callback) {
    callback(null, entry.id);
}, function (err, ids) {
    // We now have the "ids" array, holding the "id" attributes of all items in the "entries" array.
    ...
    // Optionaly, perhaps do some sorting or other post-processing on "ids".
    ...
    deferred.resolve(ids);
});

...

return deferred.promise;

Поскольку мои другие функции становятся основанными на обещаниях, у меня есть этот код, возвращающий объект обещаний, чтобы его можно было легко включить вthen() цепь.

Мне действительно нужны оба?

Главный вопрос, который яЯ изо всех сил пытаюсь сформулировать это: действительно ли мне нужны оба асинхронныха также Q в примере кода выше? Я'я учусь заменять асинхронный модульпоток управления с цепочками обещаний Q-стиля вообще ... но это непока нет "щелкнул» для меня, как сделать отображение или объединение коллекций с подходом на основе обещаний. В качестве альтернативы яЯ хотел бы понять, почему вы можетет, или почему этоне очень хорошая идея

Если async и Q предназначены для совместной работы, как я использую их в примере выше, то пусть будет так. Но я бы предпочел не требовать дополнительных библиотечных зависимостей, если бы мог использовать только Q. (

Извините если яЯ упускаю что-то невероятно очевидное. Асинхронная модель, управляемая событиями, - это совсем другой мир, и моя голова все еще плавает.)

Ответы на вопрос(1)

Ваш ответ на вопрос