2017-08-24 81 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存在时才调用该方法?