Я пытаюсь реорганизовать некоторый код узла, который является полным беспорядком обратных вызовов. Я думал, что было бы неплохо дать обещания попробовать для этой цели. Я пытаюсь преобразовать некоторую строку xml в json с модулем узла xml2js
. Исходный код был:Promisifying xml2js parse function (ES6 Promises)
"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' ] } }
После первого ответа на этот вопрос How do I convert an existing callback API to promises? я попытался обернуть функцию 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 promisify, но я хотел бы сделать это на простом Javascript без каких-либо сторонних библиотек.
Использовать # 3 "обратный вызов стиля узла", а не # 2 "простой обратный вызов" из этого ответа. – Bergi