2017-05-08 98 views
0

我使用Angular 2将数据发布到返回XML响应的URL,我想将数据转换为JSON,因此我使用的是xml2js使用observables订阅的Angular2 HTTP POST显示数据为'undefined'

转换发生得很好,但'订阅'块中未定义'data'。请纠正我,如果我拧,我猜,因为xml2js是一个异步操作,'数据'是未定义的。那么,如何处理承诺情况的承诺并正确返回转换后的JSON数据呢? 代码如下:

this.http.post(this._yourUrl, formdata.toString(), options) 
.map(res => { 
     xml2js.parseString(res.text(), function (err, result) { 
     console.dir(result); // Prints JSON object! 
     return result; 
    }); 
}) 
.subscribe(data => { 
     console.log(data);    
}); 

任何帮助,非常感谢。谢谢!

+0

尝试加入了一回'回报xml2js.parseString ...'或从地图拉姆达方法 – CriPstian

+0

CriPstian去掉括号,我已经尝试添加一个返回到xml2js.parseString,它返回一个SAXParser对象。去除大括号会导致编译错误。 – Malick

回答

3

假设xml2js.parseString是同步操作,

试试这个:

this.http.post(this._yourUrl, formdata.toString(), options) 
.map(res => { 
     var myRes; 
     xml2js.parseString(res.text(), function (err, result) { 
      console.dir(result); // Prints JSON object! 
      myRes = result; 
     }); 
     return myRes; 
}) 
.subscribe(data => { 
     console.log(data);    
}); 
+0

echonax,它的工作!谢谢:)如果你不介意,请给我提供一个与此有关的链接,以便我能理解这是如何工作的。 – Malick

+1

@Malick在库回调中返回结果可能会非常棘手。我假设这个lib在其本地代码中使用类似流或像'forEach'这样的不可破解的循环,所以它没有返回任何东西。因此,返回'parseString'之外的值应该可以解决问题。检查这个想法:http://stackoverflow.com/questions/34653612/what-does-return-keyword-mean-inside-foreach-function/34653650 – echonax

+0

好吧。将检查。再次感谢! – Malick