From 2fe9c1e55f2f87ac48d038b38909624c51023909 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 7 Apr 2015 23:46:52 +0100 Subject: [PATCH] Change node config load to be async --- red/nodes/registry/loader.js | 122 ++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 59 deletions(-) diff --git a/red/nodes/registry/loader.js b/red/nodes/registry/loader.js index 7e3daaed3..9a9ae4d91 100644 --- a/red/nodes/registry/loader.js +++ b/red/nodes/registry/loader.js @@ -36,7 +36,7 @@ function load(defaultNodesDir,disableNodePathScan) { } function loadNodeFiles(nodeFiles) { - var nodes = []; + var promises = []; for (var module in nodeFiles) { /* istanbul ignore else */ if (nodeFiles.hasOwnProperty(module)) { @@ -45,7 +45,7 @@ function loadNodeFiles(nodeFiles) { /* istanbul ignore else */ if (nodeFiles[module].nodes.hasOwnProperty(node)) { try { - nodes.push(loadNodeConfig(nodeFiles[module].nodes[node])) + promises.push(loadNodeConfig(nodeFiles[module].nodes[node])) } catch(err) { // } @@ -54,68 +54,72 @@ function loadNodeFiles(nodeFiles) { } } } - return loadNodeSetList(nodes); + return when.settle(promises).then(function(results) { + var nodes = results.map(function(r) { return r.value; }); + return loadNodeSetList(nodes); + }); } function loadNodeConfig(fileInfo) { - var file = fileInfo.file; - var module = fileInfo.module; - var name = fileInfo.name; - var version = fileInfo.version; - - var id = module + "/" + name; - var info = registry.getNodeInfo(id); - var isEnabled = true; - if (info) { - if (info.hasOwnProperty("loaded")) { - throw new Error(file+" already loaded"); - } - isEnabled = info.enabled; - } - - var node = { - id: id, - module: module, - name: name, - file: file, - template: file.replace(/\.js$/,".html"), - enabled: isEnabled, - loaded:false - }; - - try { - var content = fs.readFileSync(node.template,'utf8'); - - var types = []; - - var regExp = /