相关疑难解决方法(0)

Angular/RxJs什么时候应该取消订阅"订阅"

我应该何时存储Subscription实例并unsubscribe()在NgOnDestroy生命周期中调用,何时可以忽略它们?

保存所有订阅会在组件代码中引入很多混乱.

HTTP客户端指南忽略这样的订阅:

getHeroes() {
  this.heroService.getHeroes()
                   .subscribe(
                     heroes => this.heroes = heroes,
                     error =>  this.errorMessage = <any>error);
}
Run Code Online (Sandbox Code Playgroud)

同时," 航线与导航指南"说:

最终,我们会在其他地方导航.路由器将从DOM中删除此组件并将其销毁.在此之前我们需要自己清理.具体来说,我们必须在Angular破坏组件之前取消订阅.如果不这样做可能会造成内存泄漏.

我们取消订阅我们ObservablengOnDestroy方法.

private sub: any;

ngOnInit() {
  this.sub = this.route.params.subscribe(params => {
     let id = +params['id']; // (+) converts string 'id' to a number
     this.service.getHero(id).then(hero => this.hero = hero);
   });
}

ngOnDestroy() {
  this.sub.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)

subscription observable rxjs angular angular-component-life-cycle

653
推荐指数
10
解决办法
15万
查看次数

如何在Rx Observable上"等待"?

我希望能够等待一个可观察的,例如

const source = Rx.Observable.create(/* ... */)
//...
await source;
Run Code Online (Sandbox Code Playgroud)

天真的尝试会导致等待立即解决而不会阻止执行

编辑:我的完整用途的伪代码是:

if (condition) {
  await observable;
}
// a bunch of other code
Run Code Online (Sandbox Code Playgroud)

我知道我可以将其他代码移动到另一个单独的函数并将其传递给subscribe回调,但我希望能够避免这种情况.

javascript rxjs ecmascript-7

83
推荐指数
6
解决办法
4万
查看次数

Angular Http - toPromise或subscribe

我在Angular上观看了一些课程,发现有不同的方法来管理来自Http请求的数据.

  • 使用Observables .map(),.subscribe()
  • 使用承诺,.toPromise(),.then(),.catch()

toPromise()在我的应用程序中使用过,因为我发现它类似于AngularJS Http服务.

在什么情况下我需要使用Observables?

angularjs angular2-services angular

16
推荐指数
2
解决办法
3万
查看次数

Angular ngOnInit中的异步/等待

我目前正在评估替换Angular的优点的利弊。RxJS” Observable与普通的Promise,这样我可以使用asyncawait并获得更直观的代码风格。

我们的典型场景之一:在中加载一些数据ngOnInit。使用Observables,我们可以:

ngOnInit () {
  this.service.getData().subscribe(data => {
    this.data = this.modifyMyData(data);
  });
}
Run Code Online (Sandbox Code Playgroud)

当我改为返回Promisefrom getData(),并使用async和时await,它变为:

async ngOnInit () {
  const data = await this.service.getData();
  this.data = this.modifyMyData(data);
}
Run Code Online (Sandbox Code Playgroud)

现在,很明显,Angular不会“知道”,而ngOnInit变成了async。我觉得这不是问题:我的应用仍然可以像以前一样工作。但是,当我查看OnInit接口时,显然并未以暗示可以声明该函数的方式声明该函数async

ngOnInit(): void;
Run Code Online (Sandbox Code Playgroud)

所以-底线:我在这里做什么合理吗?还是会遇到任何无法预料的问题?

asynchronous promise observable typescript angular

12
推荐指数
5
解决办法
2895
查看次数

Angular2中对Http的承诺vs Observable?

从本质上讲,标题所说的是,为了进行http调用,是否有任何理由使用可观察量而不是承诺?看起来像不必要的过度复杂,因为所有的调用都会成功或失败,并且几乎没有真正的理由取消它.要求这是典型的用例,而不是典型的可观察性销售 - 去抖动(具有讽刺意味的是,无论如何,ng-debounce确实很好,而不会进行无用的调用).

http promise observable angular

8
推荐指数
1
解决办法
9274
查看次数

何时使用Promise over可观察的?

在任何情况下,Promise都比可观察的功能更强大吗?我知道可观察变量比承诺具有很多好处。但是无论如何,我应该只对可观察对象使用诺言。

我发现了这个链接,promise vs observables。但是,这始终向我展示了可观察性优于承诺的优势。我想知道诺言比可观察的好处。

promise observable rxjs ecmascript-6 angular

8
推荐指数
2
解决办法
6803
查看次数

在 Angular 中使用 Http 进行 Observable 的好处

从这里:https ://stackoverflow.com/a/40135509/462608

首先,这个答案描述了 Observables 如何有助于防止向服务器发出相同的重复请求,以及我们如何在多个请求之间暂停,以便服务器不会过载。

他们说:

就我在 Angular 中使用 Http 而言,我同意在正常用例中使用 Observable 与 Promise 没有太大区别。这些优点在实践中都没有真正相关。希望我将来能看到一些高级用例:)

我在这里理解的是,当使用 Http 时,Observables 的好处并不真正相关。

为什么会这样?Http在这种情况下扮演什么角色呢?
我必须研究什么主题才能理解 Http 在这里的作用?

http observable rxjs angular-promise angular

8
推荐指数
1
解决办法
2958
查看次数

Angular 6 - 用简单的英语进行可观察的解释

我正在寻找关于RXJS中Observable的简单英语解释.

它可以用于什么,以及任何有用的解释视频链接,教程,用例,示例,或任何真正的.

到目前为止,我在Udemy,Todd Motto,Youtube,Angular官方网站上找到的任何内容都没有找到我,我只是想要一个基本的解释,如果可能的话.

到目前为止,我所知道的是你可以用观察者订阅它们.它只是另一种变量吗?

提前致谢.

observable angular

7
推荐指数
2
解决办法
5232
查看次数

我可以将 async/await Promise 与 observable RXJS 混合使用吗?

我正在使用 ionic/angular 和 RXJS observables。

我正在尝试使用 Rxjs observables 重构我的代码,我有下一个代码:

ionViewWillEnter() {
    if (this.platform.is('core') || this.platform.is('mobileweb')) {
      this.lat = 37.3675506;
      this.lng = -6.0452695;
      this.printMap();
    } else {
      if (this.platform.is('android')) {       
        this.tryGeolocation();            
      } else if (this.platform.is('ios')) {
        console.log("IOS")
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果用户从 android 移动设备访问我应该检查:isLocationAuthorized、isLocationEnabled() 以使用 getCurrentPosition() 获取当前位置,然后我必须在使用 Observables forkjoin 的地方打印 Map。

问题是检查方法返回承诺,我不知道如何链接这个流程。

tryGeolocation 是下一个:

 async tryGeolocation() {
    try {
      if (await this.diagnostic.isLocationAuthorized()) {
        if (await this.diagnostic.isLocationEnabled()) {
          this.loading = this.loadingCtrl.create({
            content: 'Localizando...',
            dismissOnPageChange: true
          });
          this.loading.present();
          const {coords} = await this.geolocation.getCurrentPosition();
          this.lat …
Run Code Online (Sandbox Code Playgroud)

observable rxjs ionic-framework rxjs5 angular

6
推荐指数
1
解决办法
4805
查看次数

Angular 5 - Promise 与 Observable - 性能上下文

我有一个 Angular 5 站点,它从 REST API 接收数据,例如每个页面向 API 发出 1-4 个请求,发生的情况是请求有时需要很长时间(有时不需要)。

现在,所有请求都使用Observable在一个函数中执行:

return this.http.post(url, {headers: this.header})
        .map(res => res.json())      
        .catch(this.handleError)
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 是否因为正在使用 Observable 而导致缓慢的过程发生?会承诺将是更好的性能?或者在性能上下文中 Observable 和 Promise 之间没有区别吗?

rxjs angular angular-observable

6
推荐指数
2
解决办法
4781
查看次数