Angular2可观察和承诺
我开始使用Angular2 Observable,但是我找不到与Promises一起使用的类似的东西。
这就是我想要完成的。 来自header.component.ts的代码 public login() { this._user = AuthService.getInstance().login(this._loginInfo); } 来自auth.service.ts的代码 return this._httpClient.post('LoginAction',credentials) .map(res => res.json()) .subscribe(user => { return new User(user); }); 有了承诺,登录功能将返回Promise,最终将转换为服务器的实际响应。但是用可观察的方式,这不会奏效。 有没有办法做类似的事情?我想避免在组件的登录功能中放置订阅。我想要能够完成所有的工作,并将实际的对象返回到组件。 此外,我试图创建Promise,与Promise,但我不断得到Promise不是一个功能。 附: _httpClient是围绕angular2 http的包装器,其中我通过添加一些标题等来准备请求 编辑 return this._httpClient.post('LoginAction',credentials) .map(res => res.json()) .toPromise(). <-- i keep getting that it is not a function then(user => { return new User(user); }); 通过这样做,我的组件将获得对象(这是它需要的),并且在服务中,我可以做其他的事情(如保存用户到本地存储,一旦我登录他)。 而我转而承诺,因为与Observable做同样的事情是不行的(或者我做错了)? 我看到返回的对象是Observable(在调用Promise之前),但是我并没有看到Promise函数。
当您拨打订阅(…)时,将返回没有toPromise()的订阅。如果您将代码从订阅移动到地图,您可以使用Promise()而不是订阅
return this._httpClient.post('LoginAction',credentials) .map(res => res.json()) .map(user => { return new User(user); }).toPromise(); 并且呼叫者将获得一个Promise,在那里他可以获得该值 public login() { this._user = AuthService.getInstance().login(this._loginInfo) .then(result => { doSomething(); }); } 但是如果省略`.toPromise()并且调用者使用它,您将获得相同的结果 public login() { this._user = AuthService.getInstance().login(this._loginInfo) .subscribe(result => { doSomething(); }); } 其中唯一的区别是subscribe()而不是then(),如果库的用户喜欢反应式样式,他喜欢使用像他习惯的subscribe()。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |