2017-08-24 79 views
-1

是否有其他方式可以編寫以下功能?簡化空觀察功能

getStation(id) { 
    if (id) { 
     return this.httpClient.get('/api/stations/edit/' + id, {}) 
    }else { 
     return Observable.empty(); 
    } 
} 


getStation(id) { 
    return id ? this.httpClient.get('/api/stations/edit/' + id, {}) : Observable.empty(); 
} 

我想知道是否有一種方法來去除else一部分,默認情況下,如果沒有返回功能,返回一個空觀測。

​​

但是這種方式不行。

(這是所有關於好奇心......我會用「其他」來我的代碼)

+0

不,您不能純粹從定義方法中給出某種默認返回。如果你說它返回'Observable ',你必須在某個時候明確地做到這一點。 – jonrsharpe

+0

所以...你想要的東西完全符合'else'的要求,但不是'else'或者三元組?我不確定你的目標是什麼。 –

+0

但是,您可以指定它可能會返回多種類型。只需在類型之間使用管道符號。可觀測的 | otherTypeHere。但它通常不是很好的做法。 – diopside

回答

1

不知道是否一定要好,但你可以使用一個裝飾:

function DefaultObservable(target, prop) { 
    let original: Function = target[prop]; 
    target[prop] = function() { 
     return original.apply(this, arguments) || Observable.empty(); 
    } 
} 

class MyClass { 
    @DefaultObservable 
    getStation(id) { 
     if (id) { 
      return this.httpClient.get('/api/stations/edit/' + id, {}); 
     } 
    } 
} 

的裝飾經線您的原始函數,以便它返回一個默認值,如果從原始函數返回的值是虛假的。

0

請參閱https://blog.mariusschulz.com/2016/11/18/typescript-2-0-the-never-type瞭解「從不」操作符。

而不是返回一個空的可觀察,你可以告訴打字稿,該函數可能永遠不會返回任何東西。

getStation(id) : Observable<any> | never { 
    if (id) { 
      return this.httpClient.get('/api/stations/edit/' + id, {}) 
    } 
} 

這是什麼情況?而不是將'undefined'作爲參數傳遞給該方法,是否可以在代碼中的其他位置檢查id,並且只在id存在時才調用該方法?