Angular2可观察和承诺

前端之家收集整理的这篇文章主要介绍了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()。

猜你在找的Angularjs相关文章