如何修复Angular中的“ source.lift不是函数”错误?

时间:2018-08-22 11:20:24

标签: angular webpack rxjs

调用 http get 时,我正在使用angular project source.lift is not a function的自定义版本。错误位于core.js文件中。

如何解决此问题?

enter image description here

6 个答案:

答案 0 :(得分:9)

我们也遇到了同样的问题。最后,结果证明是括号不匹配的问题。我们使用了switchMap运算符和catcherror运算符。但是因为我们的括号是错误的。 catcherror运算符很有趣地被用作switchMap(结果选择器)的第二个参数,尽管该参数仍然可以编译。因此,请仔细检查括号。

答案 1 :(得分:3)

我的Web应用程序中存在相同的错误,直到意识到要测试升级rxjs版本后我才将其修复,因为我的版本为6.0.0,目前已更改为最后一个版本6.3。 .2解决了我的问题。 总而言之,这是rxjs的第一个版本中的一个错误,我们应该对其进行更多测试,但是到目前为止还不错。 希望对您有帮助。

答案 2 :(得分:1)

对我来说,我使用的是catchError,而没有tap

错误:

import {catchError} from 'rxjs/operators';

this.http.get(url, options).pipe(
    catchError(
      (err: HttpErrorResponse) => {
        // Do Stuff
      }
    )
  );

正确:

import {catchError, tap} from 'rxjs/operators';

this.http.get(url, options).pipe(
    tap(
      () => {},
      catchError(
        (err: HttpErrorResponse) => {
          // Do Stuff
        }
      )
    )
  );

答案 3 :(得分:1)

尝试检查您的webAPI。

如果您无权访问Web服务器的日志,则可以设置null而不是'catchError'块,并使用调试器检查Angular应用程序。

答案 4 :(得分:0)

有同样的问题。 catchError不应放在尖括号中。

错误:点击时调用catchError

  getHeroes() : Observable<Hero[]> {
    return this.http.get<Hero[]>(this.heroesUrl)
      .pipe(tap(_ => console.log('Fetching heroes'),
      catchError(this.handleError('getting heroes', []))  ))
  }

enter image description here

正确的是:(没有捕获catchError)

  getHeroes() : Observable<Hero[]> {
    return this.http.get<Hero[]>(this.heroesUrl)
      .pipe(tap(_ => console.log('Fetching heroes')),
      catchError(this.handleError('getting heroes', [])  ))
  }

答案 5 :(得分:0)

我遇到了同样的问题,并通过使用catch和不在内部的管道作为catchError的参数来解决

this.http.post(payload)
    .pipe(map((res) => {
            return res.data;
        }),
     )
     .catch(err => {
         throw of(err);
        });
}