2016-05-05 52 views
2

我在想我的代碼有什麼問題。我在我的服務如下:Http流發送兩次而不是一次

updateCollection(){ 
    var updateStream = this._http.get('someApi') 
     .map((res)=>{ 
      return res.json(); 
     }) 

    updateStream.subscribe(
     success=> { 
      this.collection.length = 0; 
      console.log('Success in getting collection: ', success.collection); 
      (<any>Object).assign(this.collection, success.collection); 
      return this.collection; 
     } 
    ); 

    return updateStream; 
} 

getCollection(){ 
    return this.updateCollection(); 
} 

而在我的部分,我已經定義:

this._service.getCollection() 
     .subcribe(
      success=>{ 
       console.log("In component", success) 
      } 
) 

不過,我可以從我的Chrome網絡和debuggin看,似乎是:

this._http.get('someApi') 

被調用兩次,而不是一次。

我錯過了什麼?

回答

1

這是因爲你subscribe()兩次。一旦進入updateCollection()並且一次進入getCollection()

這應該做你想要什麼:

updateCollection(){ 
    return this._http.get('someApi') 
     .map((res)=>{ 
      let result = res.json(); 
      this.collection.length = 0; 
      console.log('Success in getting collection: ', success.collection); 
      (<any>Object).assign(this.collection, success.collection); 
      return result; 
     }) 
     .catch(error => { 
      console.log(error); 
      return Observable.of([]); to silently continue 
      // or return Observable.throw(error); 
      // or just throw error; 
     }); 
} 

確保你所擁有的一切進口

import 'rxjs' 

import 'rxjs/add/observable/of' 
import 'rxjs/add/operator/catch' 
+0

是有那麼一種方法來在地圖方法內趕上錯誤? – uksz

+0

我解答了我的答案。 –

+1

一如既往有幫助。謝了哥們! – uksz