javascript - promise xml2js 解析功能(ES6 promise )

标签 javascript json node.js promise es6-promise

我正在尝试重构一些包含回调的 Node 代码。我认为为此目的尝试 promise 会很好。我正在尝试使用 xml2js Node 模块将一些 xml 字符串转换为 json。原代码为:

"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?我尝试按以下方式使用 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 上执行此操作。

最佳答案

另一种选择是使用 native util 模块的 promisify 方法,available from Node 8.0 :

const xml2js = require('xml2js');
const util = require('util');

xml2js.parseStringPromise = util.promisify(xml2js.parseString);

// await xml2js.parseStringPromise(.. your xml ..);

关于javascript - promise xml2js 解析功能(ES6 promise ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756453/

相关文章:

javascript - 如何根据链接内容添加类?

javascript - 单击按钮即可遍历每个 div 并更改类

javascript - Vue.js 中的同级组件与 vue-router ?

javascript - 谷歌地图中的侧边栏链接未从动态生成的标记加载

javascript - Meteor 路由器崩溃 - 无法调用未定义的方法 'filters'

javascript - JSON.stringify 和 JSON.parse 在 IE9 中不起作用?

android - 解析云函数将 JSON 发送给特定用户

node.js - node-sass-jspm-importer 路径配置的使用

javascript - 为什么node.js中的mysql多语句选项会增加SQL注入(inject)的范围?

node.js - 如何在 sequelize 中关联表格