【发布时间】:2018-11-06 02:05:18
【问题描述】:
我正在尝试实现这一点,但需要一些帮助(我是新手)。
我现在有,
constructor(http: HttpClient, private cvservice: CvService) {
const req = http.post<any>('url', [{
"name": "ids",
"license": "GPL version 2"
}])
.subscribe(
res => {
console.log(res);
var resp = res.Results[0].results.map(x => {
return {cvid: x.ID, severity: x.CVSS };
} );
this.data = [...resp];
},
err => {
console.log("Error occured");
}
);
}
这很好,除了我需要使 http.post 同步(在继续之前需要 Results[0])并且我正在使用来自 How to synchronise Angular2 http get? 的建议。
我已将服务修改为,
export class CvService {
constructor(private http: HttpClient) {
}
url = 'foo';
getIds():Observable<any[]> {
const url='xxx';
return this.http.post(url, [{
"name": "ids",
"license": "GNU General Public License GPL version 2"
}])
.map(
res => {
res.Results[0].results.map( x => {
return {cvd: x.ID, severity: x.CVSS };
}));
}
}
}
但我认为这种语法是错误的。这会产生编译错误。有人可以在这里澄清使用地图功能的正确方法吗?
【问题讨论】:
-
你使用的是什么版本的 rxjs? (请记住,正如您链接到的帖子所指出的那样,这不会使其同步,但您不希望它同步。您可以使用 HTTP 调用的异步性质)
-
我认为您使用的是 rxjs 6+,为此您需要使用管道运算符
.pipe(map(....)),如果要链接运算符,请使用,即.pipe(map(...), tap(...), ...) -
是的;我正在使用 rxjs 6+。我已经使用 .pipe(map(..)) 实现了这一点,但现在我需要以特定顺序链接多个 http 请求。我必须解析一个的输出以作为输入数据传递给下一个。有这方面的例子吗?
标签: angular http post observable synchronous