GVKun编程网logo

angular – Rxjs subject next或onNext(angularjs injector)

9

想了解angular–Rxjssubjectnext或onNext的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于angularjsinjector的相关问题,此外,我们还将为您介绍关于An

想了解angular – Rxjs subject next或onNext的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于angularjs injector的相关问题,此外,我们还将为您介绍关于Angular 8.2.0-next.0 发布、angular – RXJS 5.subscribe()没有参数、angular – RxJS Observable with Subject,通过计时器和combineLatest进行轮询不会触发、angular – rxjs subject switchmap http错误的新知识。

本文目录一览:

angular – Rxjs subject next或onNext(angularjs injector)

angular – Rxjs subject next或onNext(angularjs injector)

我对rxjs很新,耐心.
例如,在本教程中
http://blog.angular-university.io/how-to-build-angular2-apps-using-rxjs-observable-data-services-pitfalls-to-avoid/
但我在ng-book中看到了相同的代码

我可以看到

let subject = new Rx.Subject();
subject.subscribe(value => console.log('Received new subject value: '))
subject.next(newValue);

但如果我把代码放在浏览器中我就得到了

subject.next不是一个函数

所以,如果我看看文件
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/subjects.md

var subject = new Rx.Subject();
subject.subscribe(value => console.log('Received new subject value: ',value))
subject.onNext(2);

你能解释一下教程和书的原因吗?
正在使用下一个?我错过了什么?

好像你使用的是错误的rxjs版本(4.x). Angular2使用rxjs 5 https://github.com/ReactiveX/rxjs/

另见http://reactivex.io/rxjs/

Angular 8.2.0-next.0 发布

Angular 8.2.0-next.0 发布

Bug 修复

  • core:undefinedinjectArgs(#31333)(80ccd6c)中处理 meta ,关闭 CLI#14888
  • service-worker:使用 freshness 策略缓存数据组中的不透明响应(#30977)(d7be38f),关闭#30968
  • service-worker:当请求超过超时阈值时缓存不透明响应(#30977)(93abc35)

特征

  • bazel:允许将自定义 bazel 编译器主机传递给 ngc compile(#31341)(a29dc96)
  • bazel:允许传递和重写旧的 bazel 主机(#31381)(11a208f),关闭#31341

angular – RXJS 5.subscribe()没有参数

angular – RXJS 5.subscribe()没有参数

这是一个快速的问题.我已经使用RxJS 5几个月了,我遇到了一些我不太懂的行为,因为我无法在任何地方查找它.

我正处于订阅一个只有.subscribe()的可观察链的情况下;不会触发可观察的.

但是,如果我添加onNext回调(空或不),可观察的触发器和链处理:.subscribe(()=> {});

谁能解释为什么会出现这种情况?

EDIT2 – 删除了不相关的例子

.subscribe()实际上不需要任何参数,如果没有给出,它只会创建一个 emptyObserver,这也应该可以正常工作.

但有可能在某些5.0.0-beta版本中存在与此相关的问题 – 如果您使用其中一个版本,则应更新为更稳定的版本.

const obs$= Rx.Observable.of("Foo")
  .do(() => console.log("triggered!"));
  
obs$.subscribe();
obs$.subscribe();
<script src="https://unpkg.com/rxjs@5.1.1/bundles/Rx.min.js"></script>

angular – RxJS Observable with Subject,通过计时器和combineLatest进行轮询不会触发

angular – RxJS Observable with Subject,通过计时器和combineLatest进行轮询不会触发

我写了一个函数来对一个也可以进行分页的API进行轮询.因此,使用Subject Observable完成分页,并使用计时器方法完成轮询(我也尝试使用相同结果的间隔).

这是我的代码:

getItems(pagination: Subject<Pagination>): Observable<ListResult<Item>> {
    let params: URLSearchParams = new URLSearchParams();

    return Observable
      .timer(0,5000)
      .combineLatest(
        pagination,(timer,pagination) => pagination
      )
      .startWith({offset: 0,limit: 3})
      .switchMap(pagination => {
        params.set('skip',pagination.offset.toString());
        params.set('limit',pagination.limit.toString());
        return this.authHttp.get(`${environment.apiBase}/items`,{search: params})
      })
      .map(response => response.json() as ListResult<Item>)
      .catch(this.handleError);
  }

预期的行为是:
HTTP请求每5秒触发一次,当用户更改页面时.

这是发生的事情:
第一个HTTP请求被触发,但是没有其他请求被发送到服务器UNTIL使用分页.
在第一次使用分页后,轮询也开始工作.

这是我第一次使用Observables,所以我很确定我错过了什么,但我看不出它可能是什么.

我也试过这种方法(也许它在startWith中缺少计时器计数器),但它没有改变任何东西.

[...]
  .combineLatest(
    pagination
  )
  .startWith([0,{offset: 0,limit: 3}])
[...]

解决方法

combineLatest()运算符要求所有源Observable都发出至少一个项.

您的演示只生成一个请求,因为您正在使用.startWith(). combineLatest()永远不会发出,因为分页是一个主题,它可能永远不会发出任何项目.

所以一个选择是移动.startWith():

.combineLatest(
  pagination.startWith({offset: 0,limit: 3}),pagination) => pagination
)

但也许这对你没什么帮助,因为你忽略了来自计时器的所有项目()而你只是使用了分页.所以也许你可以使用merge()从其中一个源刷新列表.然后timer()独立地增加偏移量.

Observable
  .timer(0,1000)
  .map(i => { return {offset: i*3,limit: 3}})
  .merge(pagination.startWith({offset: 0,limit: 3}))
  .switchMap(pagination => {
    return Observable.of(pagination).delay(200)
  })
  .subscribe(val => console.log(val));

angular – rxjs subject switchmap http错误

angular – rxjs subject switchmap http错误

我正在使用Subject,switchMap和.next()在触发新的http.get()请求时取消先前挂起的http调用.

问题是当我处理http错误(如超时)时,在html中调用的方法_postMPCHC.next(…)不再起作用了…
我是否需要在出错时重新创建订阅?怎么样 ?

import {Component} from '@angular/core';
import {NavController,NavParams,Toast} from 'ionic-angular';
import {Http,URLSearchParams} from '@angular/http';
import {AppSettings} from '../../appSettings';
import {Subject} from 'rxjs/Subject';


@Component({
  templateUrl: 'build/pages/video/video.html'
})
export class VideoPage {
  _postMPCHC: any= new Subject();

  constructor(private http: Http,private nav: NavController) {
    this.defineHttp();
  }

  defineHttp() {

    var sub = this._postMPCHC.switchMap((x: string) => {
      let params: URLSearchParams = new URLSearchParams();
      params.set('token',AppSettings.API_TOKEN);
      params.set('prog','mhz');
      params.set('prog','mpchc');
      params.set('action',x);

      return this.http.get(AppSettings.API_ENDPOINT,{ search: params })

    }).timeout(5000,new Error('timeout exceeded')).subscribe(x => { },error => {
        let toast = Toast.create({
          message: 'Server response: ' + <any>error,duration: 3000,position: 'middle'
        });
        this.nav.present(toast);
      })

  }
}

解决方法

问题是当流出错时 – 它结束.如果要处理http错误但保持主流处于活动状态,则应该处理http流级别的错误.
请参阅此文章 – Error handling. What to do when error kills stream.

因此,在您的情况下,您可以通过添加.pipe(catchError(…))返回this.http.get(AppSettings.API_ENDPOINT,{search:params})行来处理错误 – 它将保持您的mai流活着并且将会捕获http错误

我们今天的关于angular – Rxjs subject next或onNextangularjs injector的分享就到这里,谢谢您的阅读,如果想了解更多关于Angular 8.2.0-next.0 发布、angular – RXJS 5.subscribe()没有参数、angular – RxJS Observable with Subject,通过计时器和combineLatest进行轮询不会触发、angular – rxjs subject switchmap http错误的相关信息,可以在本站进行搜索。

本文标签: