在我的Angular10项目中,即使我import 'rxjs/operator/map';
和import { map } from 'rxjs/operators';
服务代码为
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map, filter, scan } from 'rxjs/operators';
import 'rxjs/add/operator/map';
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor( private http: HttpClient) { }
getAllPosts(){
return this.http.get('/posts').map((posts) => {
return posts;
});
}
}
如何克服此错误?我的rxjs版本高于6,角度版本为10。
答案 0 :(得分:1)
Http调用是异步的。
在有角度的此类调用中,返回一个Observble,这将使值结果可通过回调而不是直接访问
可观察对象实际上没有“地图”操作。
您可以做的是pipe(map(..))
来转换值。但是我假设,如果您调用“ getAllPosts()”,您希望将Posts接收为“纯”值。
映射用于转换某些值并更改“可观察的”结果数据。
我会考虑以下方法:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map, filter, scan } from 'rxjs/operators';
import 'rxjs/add/operator/map';
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor( private http: HttpClient) { }
getAllPosts(): Observable<Posts[]>{
return this.http.get('/posts');
}
}
以及调用Authservice的组件:
export class AnyComponent impments OnInit{
constructor( private auth:AuthService) { }
public posts: Posts[] = [];
ngOnInit(){
auth.getAllPosts().subscribe( (_posts:Post[] => this.posts = _posts);
}
}
我对您要完成的工作做了一些假设。
答案 1 :(得分:1)
您必须通过管道传输操作员。 来自the docs
请注意,对于Angular应用,我们更喜欢将运算符与管道结合使用,而不是链接。许多RxJS示例中都使用了链接。
尝试:
return this.http.get('/posts').pipe(
map((posts) => {return posts; }),
);