如何在foreach(地图)中等待服务响应?

时间:2018-01-12 14:25:32

标签: angular

  this.orderTrackings.map((v:any)=>{
            let request = {
                "description": "",
                "destinationFromCode": v.destinationfromCode,
                "destinationToCode": v.destinationtoCode,
                "ordItemNum": v.orditemnum,
                "ordnum": this.ordnum
            };
            this.restService.post( '/uomback/sordtracking/handlerequest', request).subscribe((r:any) => {
                this.getOrderTrackingInfo(v.orditemnum,true);
            });

我需要等到handlerequest得到响应才能调用下一个项目。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我相信您可以使用exhaustMap完成http请求,然后再转到下一个请求。

示例:

Observable.of(...this.orderTrackings)
    .map((v:any) => ({
        description: "",
        destinationFromCode: v.destinationfromCode,
        destinationToCode: v.destinationtoCode,
        ordItemNum: v.orditemnum,
        ordnum: this.ordnum,
    }).exhaustMap((request) => {
        return this.restService.post('/uomback/sordtracking/handlerequest', request)
                               .map((response: Response) => ({response, request});
    }).subscribe((r:any) => {
        this.getOrderTrackingInfo(r.request.ordItemNum, true);
    });

使用此设置getOrderTrackingInfo将在每POST之后调用一次。

答案 1 :(得分:0)

在我看来,你不应该等待这个执行。只需将您想要做的所有内容添加到订阅中即可。异步操作是异步的,因为它们应该是。