我試圖在一組Mongoose模型上使用Highland.js作爲數據庫更新腳本,它似乎非常適合在Model.find()
上調用QueryStream。我有一些同步的事情要做(更新我的模型以符合新的模式,一些清理操作),最後我想要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如此密切地結合似乎也很奇怪。有沒有更好的辦法?
更新:它看起來越來越像這是一個問題,'未完成'事件沒有被調用比數據沒有返回。儘管如此,仍然不確定這是否是高地的使用方式。 – 2014-12-18 23:55:03