使用observables订阅的Angular2 HTTP POST显示数据为'undefined'
我使用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);
});
任何帮助,非常感谢。谢谢!
假设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);
});
echonax,它的工作!谢谢:)如果你不介意,请给我提供一个与此有关的链接,以便我能理解这是如何工作的。 – Malick
@Malick在库回调中返回结果可能会非常棘手。我假设这个lib在其本地代码中使用类似流或像'forEach'这样的不可破解的循环,所以它没有返回任何东西。因此,返回'parseString'之外的值应该可以解决问题。检查这个想法:http://stackoverflow.com/questions/34653612/what-does-return-keyword-mean-inside-foreach-function/34653650 – echonax
好吧。将检查。再次感谢! – Malick
尝试加入了一回'回报xml2js.parseString ...'或从地图拉姆达方法 – CriPstian
CriPstian去掉括号,我已经尝试添加一个返回到xml2js.parseString,它返回一个SAXParser对象。去除大括号会导致编译错误。 – Malick