From 9fdb851306e79d5ebe72c0e3e81a9b19ce0d79dc Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 11 Apr 2013 19:41:40 +0100 Subject: Handle errors in XML parsing --- lib/xmlreader.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'lib/xmlreader.js') diff --git a/lib/xmlreader.js b/lib/xmlreader.js index ef16f7b..3fde762 100644 --- a/lib/xmlreader.js +++ b/lib/xmlreader.js @@ -8,14 +8,9 @@ exports.Element = Element; function read(xmlString, namespaceMap) { namespaceMap = namespaceMap || {}; + var finished = false; var parser = sax.parser(true, {xmlns: true, position: false}); - //~ parser.onerror = function(error) { - //~ Q.fcall(function () { - //~ throw new Error("Can't do it"); - //~ }); - //~ }; - var rootElement = {children: []}; var currentElement = rootElement; var stack = []; @@ -62,9 +57,19 @@ function read(xmlString, namespaceMap) { }; parser.onend = function() { - deferred.resolve({ - root: rootElement.children[0] - }); + if (!finished) { + finished = true; + deferred.resolve({ + root: rootElement.children[0] + }); + } + }; + + parser.onerror = function(error) { + if (!finished) { + finished = true; + deferred.reject(error); + } }; parser.write(xmlString).close(); -- cgit v1.2.3