网站搜索

javascript - Rxjs 等待前一个间隔请求执行完成后再继续

使用场景: 每3分钟调用一次端点,以更新应用程序中某个服务的状态。

我当前的代码:

interval(180000) .subscribe(() => this.doRequest .pipe(catchError(() => { this.applicationFlag = false; return EMPTY;

阅读更多 →

javascript - 我如何在从订阅接收到值后使用 rxjs 运行延迟逻辑?

我想在我的订阅之后以额外的延迟运行我的部分逻辑(使用 RxJS)。我知道 finalize 操作符,我可以在 pipe 中使用它,但那会导致在我的 observable 完成后立即执行。

有没有办法在运行 finalize 之前创建延迟?

附加信息:

我正在订阅一个服务器调用,这意味着我只期望一个值。

答案#1

不,无法在 finalize 之前创建延迟。

阅读更多 →

javascript - 我们在 ActivateRouted.pathFromRoot 中需要使用 RXJS combineLatest 吗?

Angular Material 文档应用程序像这样从懒加载路由模块中获取路由参数:

https://github.com/angular/material.angular.io/blob/master/src/app/pages/component-category-list/component-category-list.ts

// Combine params from all of the path into a single object. this.params = combineLatest(

阅读更多 →

angular - AngularJS/rxjs:Observable 在订阅时未捕获错误

我正在尝试处理 Observable 上的一些自定义错误。

如果我抛出一个新的自定义错误,我想退出订阅。但无论我怎么尝试,它仍然继续处理,且没有抛出任何错误。

我正试图退出 subscribe 函数并跳到错误处理程序,但我下面的代码没有按预期工作。

const obs = new Observable((observer) => { observer.next(); }).pipe( map(() => { return "Some Data";

阅读更多 →

angular - 如何从 store dispatch RxJs 中提取返回值

长话短说,我是初级 .Net 开发人员,我接到任务要在我们的 Angular 应用中做一些更改,我完全不知道它是怎么工作的,并且在尝试更改时遇到了困难。我在一个问题上卡住了。

用户是根据表单创建的,提交后会有一个调用:

submit() { if (this.accountForm.invalid) { return; } const { email, accountExpirationDate, firstName, lastName, permissionLevel,

阅读更多 →

angular - 使用 RXJS 缓存某些东西,直到某个条件

我正在尝试创建一个 RXJS Observable,本质上它将像缓存一样工作。通常我可以直接使用 shareReplay 来实现,但是我尝试缓存的数据是基于用户的,所以需要重置。以下代码 几乎 实现了我想要的效果:

const myObservable = userProfile.pipe( switchMap(profile => loadData(profile)), shareReplay(1) );

现在数据已经加载到第一个订阅中,并且在新的用户资料到来之前不会再次加载。然而,这并不完全有效,因为在新数据加载时进行订阅的订阅者仍然会收到缓存的旧数据。这会导致用户界面显示来自上一个用户的旧数据。为了解决这个问题,我做了以下操作:

const myObservable = userProfile.pipe( switchMap(profile => loadData(profile).pipe(startWith(null

阅读更多 →

typescript - Angular 13 搭配 RxJS 7:如何使用脚本将 $obs.toPromise() 迁移到 lastValueFrom($obs)?

我正在将一个 Angular 12 项目迁移到 Angular 13。Angular 13 配备了 RxJS 7。RxJS 7 已弃用 $obs.toPromise(),推荐使用 lastValueFrom($obs)。

遗憾的是,我有大量的 $obs.toPromise(),我正在寻找一种实用且省时的方式来进行迁移。

有迁移脚本吗?

基本上看起来:

import * as fs from 'fs'; import * as glob from 'glob'; const files = glob.sync(`/**/*.ts`); files.forEach(file => { let fileContent = fs.readFileSync(file, 'utf-8'); if( fileContent.includes('toPromise()') ){ fileContent = f

阅读更多 →

typescript - Angular RXJS HTTPClient 未捕获 HttpErrorResponses 错误

Angular 12,我正在尝试运行一组单元测试,让它们能够捕捉 HTTP 响应中的错误,但当测试运行时,错误是作为响应体传递的,而不是作为错误传递的。

Spec.ts 文件

it('Test post method failure', () => { const expected: HttpErrorResponse = new HttpErrorResponse({ error: 'Bad Request', status: 400, statusText: 'B

阅读更多 →

angular - 使用 rxjs replayobject 对 TypeScript 多个小数点排序

以下是我的自定义表格组件的排序。它对字符串和数字数据类型运行良好,除了多个小数点的数字。DTableSort.ts

@Component({ selector: "myDefaultGSorter", template: ` <a style="cursor: pointer" (click)="sort()" class="text-nowrap" [ngClass]="isSortedByMeAsc ? 'sort_by_asc' : isSortedByMeDesc ? 'sort_by_desc' : 'no_sorting'"> <ng-content></ng-content> </a>` })

DTable.ts

阅读更多 →

typescript - rxjs 定时器在 subject 调用 complete() 后仍然运行

我有以下代码来在我的 Angular 8 项目中实现两件事。

  1. 我正在使用 rxjs 定时器来跟踪每 30 秒一次的 API 调用。
  2. 每当我通过 websocket 接收到数据时,我希望调用同一个 API 并将计时器重置为 30 秒。

问题:当我离开页面时计时器似乎仍在运行,因为我仍然可以在网络中看到 API 调用。我不确定这是否与 takeUntil 泄漏有关,请帮忙!

import {Observable, Subject, timer} from 'rxjs'; import {finalize, takeUntil, takeWhile

阅读更多 →