我刚刚开始在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;
});
}
答案 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()。然后(...)