2017-05-08 74 views
0

我正在使用xml2js,我需要健壯,因爲不能保證xml的源代碼格式正確。所以,我需要確保能夠處理所有錯誤。如果代碼看起來是這樣的:保證xml2js是同步的並且會拋出錯誤嗎?

let parseString = require('xml2js').parseString; 
let xml = getTheXml(...); 
parseString(xml, (err, result) => { 
    if (err) { handleError(err) } 
    else { handleResult(result); } 
}); 

我保證這parseString絕不會拋出一個錯誤和所有的錯誤都通過爲err對象回調過去了?

或者是更安全的,我需要做到以下幾點:

let parseString = require('xml2js').parseString; 
let xml = getTheXml(...); 
try { 
    parseString(xml, (err, result) => { 
    if (err) { handleError(err) } 
    else { handleResult(result); } 
    }); 
} catch (err) { handleError(err); } 

而且,我是保證parseString同步執行?

回答

1

執行錯誤優先回調設計時的預期行爲是它不是同步的,並且任何錯誤都作爲第一個參數傳遞。

「保證」..我不是該模塊的作者或貢獻者,所以我不能說這些。如果你需要確認,寫一個測試..

+0

我寫了一個測試,但測試只確保它所需的路徑是同步的。它不會測試通過該方法的其他路徑是否同步。它也不測試包的未來版本將保持同步。我希望對包裝的API合同有一個澄清,這是包裝開發人員可以回答的一個問題。 –

+0

您應該在'package.json'中指定版本以保護您的應用程序免受3:d方庫中的重大更改。 – superhero

+0

公平點。我也是這樣做的,但知道API背後的合同會讓我更有信心,當我想要升級時。我檢查了代碼,我確信解析方法不會拋出。我想我需要假定庫將使用標準節點回調。 –