2017-05-08 44 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