2016-03-02 53 views
0

使用異步函數消耗高地流的正確模式是什麼?看起來.each方法不適用於使用wrapCallback包裝的節點式異步函數。如何使用異步函數消耗高地流?

我想做類似以下的事情。請注意,我希望捕獲.each函數中生成的錯誤,並在所有異步消耗完成時觸發.done函數。

function asyncConsume(item,cb) { 
    // perform async operation based on data stream here 
    return cb(null,item); 
} 
var wrappedFunction = _.wrapCallback(asyncConsume); 

highlandStream.each(wrappedFunction).done('All successfully done!') 
    .stopOnError(function(err) { 
    console.log('This error handler catches errors in .each() as well.'); 
    }); 

謝謝。

回答

0

我想你想flatMap這裏,因爲你正在改變你的項目到一個新的數據流:

highlandStream 
    .flatMap(function(item) { 
    return wrappedFunction(item); 
}).each(someFn).done('All successfully done!') 
    .stopOnError(function(err) { 
    console.log('This error handler catches errors in .each() as well.'); 
    }); 
+0

謝謝。我真的不需要使用flatMap來轉換這個值(我想觸發一個電子郵件來發送流中的每個項目),但我試過flatMap,它現在看起來是最好的解決方案。這樣,我可以把錯誤處理程序放在它之後,以便在異步操作之後捕獲錯誤。 – bmiller59

+0

我的意思是,你正在將你的輸入變成flatMap到一個異步操作。 – Stefano

0

據我所知,你只能使用異步函數高地map功能(功能有後已被編輯爲wrapCallback)。該地圖實際上並未調用該函數,因此您需要一個Highland seriesparallel調用來跟蹤並實際處理這些調用。