diff --git a/lib/lirc_node.js b/lib/lirc_node.js index edfd946..d1ee0da 100644 --- a/lib/lirc_node.js +++ b/lib/lirc_node.js @@ -20,8 +20,7 @@ exports.init = function(callback) { function irsendCallback(error, stdout, stderr) { exports._populateRemotes(error, stdout, stderr); - exports._populateCommands(); - if (callback) callback(); + exports._populateCommands(callback); } return true; @@ -39,13 +38,23 @@ exports._populateRemotes = function(error, stdout, stderr) { }); }; -exports._populateCommands = function() { +function fetchCommandsForRemote(callback, remote){ + exports.irsend.list(remote, '', function(error, stdout, stderr) { + exports._populateRemoteCommands(remote, error, stdout, stderr); + callback(); + }); +} + +exports._populateCommands = function(callback) { + var openForks = 0; + var collector = function () { + if (--openForks <= 0) { + if (callback) callback(); + } + }; for (var remote in exports.remotes) { - (function(remote) { - exports.irsend.list(remote, '', function(error, stdout, stderr) { - exports._populateRemoteCommands(remote, error, stdout, stderr); - }); - })(remote); + openForks++; + fetchCommandsForRemote(collector, remote); } };