标签: rxjs6

TypeError:this.http.post(...).map在更新角度5到角度6之后不是函数

在将Angular 5更新为Angular 6之后,我遇到了一些关于rxjs6的问题:

TypeError: this.http.post(...).map is not a function

error TS2339: Property 'map' does not exist on type 'Observable<Object>'.

TypeError: rxjs__WEBPACK_IMPORTED_MODULE_1__.Observable.of is not a function
Run Code Online (Sandbox Code Playgroud)

我尝试过一些方法,比如:

将此导入添加到service.ts

从'rxjs/operators'导入{map};

更改http.post().pipe(map(res => {...}))

然而,所有这些都不适合我.

我的环境如下:

 "@angular/cli": "^6.0.3"
 "rxjs": "^6.2.0"
 "rxjs-compat": "^6.2.0"
Run Code Online (Sandbox Code Playgroud)

代码显示如下 Service.ts

import { Injectable } from '@angular/core';
import {environment} from '../../environments/environment';
import {HttpClient} from '@angular/common/http';
import {StorageService} from '../services/storage.service';

@Injectable()
export class VariationService {
ip = environment.url.management;
constructor(private http: HttpClient,
            private storageService: StorageService) { }
getFlowChart(status?) {
    status = status …
Run Code Online (Sandbox Code Playgroud)

rxjs angular angular6 rxjs6

3
推荐指数
1
解决办法
5666
查看次数

类型'Observable &lt;HttpEvent &lt;any &gt;&gt;'不存在属性'catchError'

从angular 5转到6(使用angular 6和rxjs 6),在我的linter中遇到以下两个错误。任何人都有任何想法,请谢谢。

[ts] 'catchError' is declared but its value is never read.
[ts] Property 'catchError' does not exist on type 'Observable<HttpEvent<any>>'.
Run Code Online (Sandbox Code Playgroud)
[ts] 'catchError' is declared but its value is never read.
[ts] Property 'catchError' does not exist on type 'Observable<HttpEvent<any>>'.
Run Code Online (Sandbox Code Playgroud)

observable rxjs typescript angular rxjs6

3
推荐指数
1
解决办法
1696
查看次数

subscribe()中的expecting()失败并不会将测试标记为无效

我们最近升级到Angular 6.0.3,RxJs 6.2.0和jest 23.1.0(从RxJS 5和Angular 4升级).

Jest和RxJs似乎存在问题,因为subscribe-Block中的expect-statements失败并不会将测试标记为失败.这是一个最小的例子:

    it("should fail", () => {

        const obs = Observable.create((observer) => {
            observer.next(false);
        });

        obs.subscribe((value) => {
            console.log(value); // => false
            expect(value).toBeTruthy();
        });

    });
Run Code Online (Sandbox Code Playgroud)

expect-Statement被执行,但测试仍然通过.我们没有观察到以前的RxJs版本和Jest的这种行为.

jestjs rxjs6

3
推荐指数
1
解决办法
738
查看次数

Rxjs 6:使用catchError()可以为您提供“未定义”的预期流。您可以提供一个Observable,Promise,Array或Iterable

我正在使用新语法来遵守RxJS 6 pipe()。同样使用Angular6。我有一个处理http请求的服务,它通过管道catchError传输地图并在出现连接错误时显示祝酒词。不过,如果我添加,catchError我会进入控制台,您在期望流的位置提供了“ undefined”。您可以提供一个Observable,Promise,Array或Iterable。

  getDataHttpRequest(url, returnType) {
    return this.http.get(url, this.getRequestOptions())
    .pipe(
      map((response) => {

        if(response){

        if (returnType === 'object') {
          return response[0] == undefined ? response : response[0];
        } else {
          return response;
        }

      }
      }),
      catchError((error):any => {

      if(error instanceof HttpErrorResponse && error.status === 0){
        //no connection error(either user has no connection or the server is down)
       this.toastr.error('Chequee su conexión e intente de nuevo en unos momentos. Contáctenos para reportar el problema a …
Run Code Online (Sandbox Code Playgroud)

rxjs angular angular6 rxjs6

3
推荐指数
1
解决办法
4594
查看次数

了解rxjs6中的合并(特别是redux-observable)

上下文:我试图在获取资源后使用redux-observablewith rxjs v6触发多个操作。

问题:我可以在获取资源后触发一个动作,没问题;但是我试图触发多个动作的尝试让我很沮丧。具体来说,我下面显示的使用rxjs merge触发多个动作的尝试看起来很标准,并且接近已记录的示例(请参见此处的示例),以至于我无法理解哪里出了问题。这是我的代码的细分,其中注释中指示了打字稿类型;为了简化问题,我简化了事情:

import { from } from "rxjs"; 
import { merge, mergeMap, map } from "rxjs/operators";
import { AnyAction } from "redux";

... //Setup related to rxjs-observable epics

function myEpic(
    action$: Observable<AnyAction>,
    state$: any,
    {fetchPromisedStrings}: any
) {
    return action$.pipe(
        ofType('MY_ACTION'),
        mergeMap(
            action => 
{
    const demoAction1: AnyAction = {type:'FOO1', payload:'BAR1'};
    const demoAction2: AnyAction = {type:'FOO2', payload:'BAR2'};

    const w = from(fetchPromisedStrings())     //const w: Observable<string[]>
    const x = w.pipe( map(() …
Run Code Online (Sandbox Code Playgroud)

merge redux-observable rxjs6

3
推荐指数
1
解决办法
767
查看次数

避免在RxJs 6中嵌套subcribe()调用

有时,我需要以前可观察到的值,并运行另一个依赖于该值的函数,依此类推。它进行嵌套的subcribe()调用,然后代码非常难看且难以管理。我这里有一个例子:

getObservableData().subcribe(next=>
    let dialogRef=this.dialog.open(EvalListComponent, {data: next})
    dialogRef.afterClosed().subscribe(next=>{
        let k=dialogRef.componentInstance.getAnotherObservableData()
            .subcribe( next=> doSomthing(next))
}))
Run Code Online (Sandbox Code Playgroud)

什么样的解决方案可以遇到这种情况。我需要一些扁平的结构。我知道有一个管道函数,可以与rxjs运算符一起使用。但是如何实现呢?

observable typescript angular rxjs6

3
推荐指数
1
解决办法
811
查看次数

RxJs:ConcatMap VS ConcatMapTo,MergeMap VS MergeMapTo

该文档不足以帮助我理解它们之间的区别。

就像concatMap,但始终将每个值映射到相同的内部Observable。 http://reactivex.io/rxjs/file/es6/operators/concatMapTo.js.html

我尝试查看关于stackblitz的learningrxjs.io的示例,但是即使有了这些示例,我也无法立即识别出区分这些特征的区别。

仅供参考,我看到了另一个类似的问题 ,mergeMap和mergeMapTo有什么区别? 但是那里的答案并不令人满意,因为在learnerxjs.io示例中,它们显然映射到可观察对象,而不是硬编码值。 https://www.learnrxjs.io/operators/transformation/concatmapto.html

如果有人可以提供一些示例(也许是简短的解释)来帮助区分***与***,以区分高阶可观察算子,谢谢,谢谢。

rxjs rxjs6

3
推荐指数
1
解决办法
666
查看次数

链3个或更多相关可观察物

我知道这个问题以前有人问在这里。但是接受的解决方案不适用于我,或者我无法很好地理解它。

我正在使用ng-7,我有一个简单的用例:

我有2个API,第2个取决于1st的响应。我订阅第一个API的结果,然后使用管道订阅第二个API的结果。

我的代码如下所示;

this._SomeService
        .addUserToDb(payload)
        .pipe(
          map(res => res),
          mergeMap(db1Response =>
            this._SomeService.addUserToDb2(db1Response
            )
          ),
          catchError(errodb1 => {

            return Observable.throw(new 
            Error(errorSso));
          })
        )
        .subscribe(
          resDb2 => {
              // Here I get response of addUserToDb2
          },
          errDb2 => {


          }
        )
Run Code Online (Sandbox Code Playgroud)

现在,在订阅第二个API响应之前,我想订阅另一个可观察的说法:

this._tokenService.getToken.pipe(

并希望在服务2中使用它的响应。这样:

API1 =>令牌=> API2

请建议如何实施。

更新:

我尝试实现,以下是我的实现:

  this._service.addUserToDB1(payload).pipe(
          map(resp => this.resDB1 = resp) // Adding to global variable because I need this response while subscribing to DB2 service.
          ,mergeMap(resdb1=>this._tokenService.getToken.pipe(
            mergeMap(token => this._service.addUserToDb2(
              this.resDB1,
              this.organizationId,
              this.practitionerId, …
Run Code Online (Sandbox Code Playgroud)

observable rxjs-pipeable-operators rxjs6 angular7

3
推荐指数
1
解决办法
152
查看次数

Angular-在Http.post中接收并返回Observable &lt;T&gt;响应

我实现了一个返回Observable的方法。在此方法内部,我使用http.post向后端发送请求。接收到响应(它是一个JSON对象)后,我要将其存储在Observable变量中并返回该变量。但是我不知怎么解决了那个问题。在.subscribe中,res变量没有存储在postResponse变量中,但是我可以在“本地” console.log中看到res变量具有正确的值。全局console.log为空。此外,我得到了错误:

错误“ TS2322:类型'ArqResponse'无法分配为类型'可观察'”返回错误。

我的代码如下所示:

postARQRequest(request): Observable<ArqResponse>{
    let postResponse = new ArqResponse;
    const result = this.http.post<ArqResponse>(this.arqUrl, request)
                       .subscribe((res: ArqResponse) => { postResponse = res; console.log('shadow: ' + res)});
    console.log('global: ' + JSON.stringify(postResponse));
    return postResponse;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 如何将响应主体存储在变量中,然后可以将其返回?
  2. 如何将ArqResponse变量“投射”到Observable变量?
  3. .subscribe 似乎是错误的,因为我得到:

this.arqService.postARQRequest(...)。subscribe不是函数错误

observable rxjs typescript angular rxjs6

3
推荐指数
1
解决办法
458
查看次数

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