使用空的observable简化函数

时间:2017-08-24 22:00:09

标签: angular typescript observable

还有其他方法可以编写以下功能吗?

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部分,默认情况下,如果没有返回该函数,则返回一个空的Observable。

getStation(id): Observable<any>

但这并不是那样的。

(这完全取决于好奇心......我将使用&#34;否则&#34;到我的代码中)

2 个答案:

答案 0 :(得分: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, {});
        }
    }
}

装饰器会扭曲原始函数,以便在原始函数返回的值为falsy时返回默认值。

答案 1 :(得分:0)

请参阅https://blog.mariusschulz.com/2016/11/18/typescript-2-0-the-never-type,了解“永远不会”。运营商。

不是返回一个空的observable,而是告诉typescript该函数可能永远不会返回任何内容。

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

您的用例是什么?而不是传递未定义的&#39;作为该方法的参数,您是否只能检查代码中其他地方的ID,并且只有在id存在时才调用该方法?