加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2可观察和承诺

发布时间:2020-12-17 08:17:08 所属栏目:安全 来源:网络整理
导读:我开始使用Angular2 Observable,但是我找不到与Promises一起使用的类似的东西。 这就是我想要完成的。 来自header.component.ts的代码 public login() { this._user = AuthService.getInstance().login(this._loginInfo);} 来自auth.service.ts的代码 retur
我开始使用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()。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读