Я пытаюсь использовать Highland.js для сценария обновления базы данных на множестве Mongoose моделей, это кажется довольно идеально подходит для QueryStream вызова на Model.find()
. У меня есть некоторые синхронные вещи (обновление моей модели для соответствия новой схеме, несколько операций очистки), и в конце я хочу, чтобы документ save()
. У меня есть настроенные заранее подготовленные перехватчики, которые нужно запустить, и обновления на самом деле не совместимы с прямой Model.update()
. Я сумел получить его сортировки работы с помощью комбинации Q.js и нагорья:Асинхронные преобразовывает на потоках в Highland.js
var sender_stream = Sender.find({}).stream();
var promise_save = function(document) {
var deferred = Q.defer();
document.save(deferred.makeNodeResolver());
return _(deferred.promise);
}
var sender_deferred = Q.defer();
_(sender_stream).map(function(sender) {
// set some fields on sender...
return sender;
}).map(promise_save).series().on('done', sender_deferred.resolve).resume();
Однако, это, кажется, не решить обещание, и я не уверен, что это «право» способ держать вещи приятными и потоковыми ... кажется, странно сочетать Q.js и Highland.js так глубоко. Есть ли способ лучше?
Обновление: все больше похоже на проблему с неработающим событием, чем данные, которые не возвращаются. Тем не менее, не уверен, что именно так используется Хайленд. –