为什么返回类型Observable比原始类型更好?

时间:2017-08-15 15:13:39

标签: angular observable

我刚刚开始在Angular 2中实现该应用程序。我对下面的代码有一些疑问。为什么在authenticate方法中返回Observable而不仅仅是boolean类型?如果我查看专家的源代码,他们将大部分内容作为Observable返回。我担心这可能是一个愚蠢的问题,但我很好奇。

authenticate(user: string, pass: string): Observable<boolean> {
        return this.http.request(new Request({
            method: RequestMethod.Post,
            url: this.baseUrl + "login",
            body: { name: user, password: pass }
        })).map(response => {
            let r = response.json();
            this.auth_token = r.success ? r.token : null;
            return r.success;
        });
    }

3 个答案:

答案 0 :(得分:1)

您会注意到,在几乎所有带有http请求的方法中,它们都返回了observable。

这是因为Http请求(网络)请求本质上是异步的。这意味着,当您发出网络请求时,您不知道在调用堆栈中何时应该处理响应。响应取决于网络速度,api效率,干扰等。

为何选择Observables?他们订阅了!当响应通过时,您订阅它们。 Rxjs带有一大堆运算符,可以解析响应,或者出现错误,更清晰,更愉快的体验。

我建议您浏览一些在线发现的Rxjs示例。可观察者是超级强大的。他们可以管理您的应用程序状态,数据访问层,视图以及介于两者之间的所有内容。

检查rxjs站点以获取有关rx的所有文档和视觉效果。 http://reactivex.io/

答案 1 :(得分:0)

在函数内部调用的http请求是异步的,这意味着响应可能需要一段时间才能实现客户端。 Observables让您有权等待响应并执行某些操作。

例如:假设您将直接在此cas中返回布尔值,您将始终获得空值,因为http请求不会等待响应返回它。

答案 2 :(得分:0)

说它是一个可观察的,让它有点说'最终我们会有这种类型的价值回来'。它允许值流随着时间的推移而通过,这就是为什么它最好用于每个异步http请求。 map函数也返回一个observable,因此尝试返回一个直接的布尔值将需要一些不必要的工作。 Map(...)优先于.promise()。然后(...)