[英]Angular 5 - http get with xml response
Newby需要錯誤幫助。 我通過http get請求請求數據。 數據為xml格式。 我需要將其轉換為json以在我的Angular應用中使用。 當我運行以下代碼時,在控制台中出現錯誤“ TypeError this.http.get()。map不是函數。
list() {
return this.http.get(this.apiRoot).map(res => {
let data;
xml2js.parseString( res.toString, function (err, result) {
console.dir(data); // Prints JSON object!
data = result;
});
return data;
})
.subscribe(data => {
console.log(data);
}); }
謝謝
您需要從rxjs導入可觀察對象的運算符映射。
import { map } from 'rxjs/operators';
您需要導入rxjs映射運算符。 使用現有代碼,您可以執行以下操作:
import 'rxjs/add/operator/map';
您也可以導入運算符功能本身。 這是首選。 參見: https : //github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
import { map } from 'rxjs/operators';
...
return this.http.get(this.apiRoot).pipe(map(res => {
如果您使用的是不推薦使用的HttpModule
而不是HttpClient
,則必須執行其他步驟以獲取響應文本:
.pipe(
map(res => res.text()),
如果您使用的是HttpClient
,則不需要這樣做。
最后,由於您使用的是不支持Promises或Observables的xml2js
,因此您必須將調用包裝為.parseString
才能將其添加到可觀察流中。 幸運的是,RxJS提供了一個為您執行此操作的包裝函數: http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindNodeCallback。
在這里,我們使用switcMap
而不是map
因為bindNodeCallback
返回一個可觀察的對象。 switchMap
將為我們扁平化 。
import { bindNodeCallback } from 'rxjs/observable/bindNodeCallback';
import { switchMap } from 'rxjs/operators';
function list() {
return this.http
.get(this.apiRoot)
.pipe(switchMap(res => bindNodeCallback(xml2js.parseString)(res)))
.subscribe(console.log);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.