Я пытаюсь реорганизовать некоторый код узла, который представляет собой целую кучу обратных вызовов. Я подумал, что было бы неплохо попробовать promises для этой цели. Я пытаюсь преобразовать некоторую строку xml в json с помощью модуля узла xml2js
. Исходный код был:
"use strict";
var xml2jsParser = require('xml2js').parseString;
var string = "<container><tag3>option3</tag3></container>";
xml2jsParser(string, function(err, result)
{
console.log(result);
});
и это отображает:
{ container: { tag1: [ 'option1' ], tag2: [ 'option2' ], tag3: [ 'option3' ] } }
После первого ответа на этот вопрос Как мне преобразовать существующий API обратного вызова в промисы? Я попытался обернуть функцию xml2jsParser с помощью промисов следующим образом:
"use strict";
var xml2jsParser = require('xml2js').parseString;
function promisesParser(string)
{
return new Promise(function(resolve, reject)
{
xml2jsParser(string, resolve);
});
}
var string = "<container><tag3>option3</tag3></container>";
promisesParser(string).then(function(err, result){
console.log(result);
});
Это отображает undefined
через консоль вместо объекта json, как и ожидалось. Я не понимаю, почему это происходит, поскольку я смог успешно сделать то же самое с другими функциями. Я знаю, что нечто подобное может быть достигнуто с помощью функции обещания Bluebird, но я хотел бы сделать это на простом Javascript без каких-либо сторонних библиотек.