只要不满足条件,就重复HTTP请求

时间:2017-09-19 21:08:11

标签: angular observable angular2-services

我是Angular的初学者,这个问题可能很愚蠢或重复,对不起。

我的目标是只要response.Done!= true就向Web API发送请求,这是我在onInit事件中从服务调用函数的代码:

export class FlightListComponent implements OnInit {

  flightSearchResult: FlightSearchResult;

  constructor(private service: FlightService) {
  }

  ngOnInit() {

    let guid = Guid.newGuid();

    this.service.getAll(guid).subscribe(response => {

      if (response.Done != true) {
        this.serveData(response);
        //  this.service.getAll(guid) ....
      }

    });
  }

在每个请求中我还得到一些数据,我需要通过serveData()将它们合并到一个主变量中。但我认为在这种情况下应该有更好的方法来处理observable,只要Done不等于true,我需要多次调用getAll()并且事件在最后给我所有数据而不在每个请求中合并。一些如何将每个传递的Observable的值合并为一个Observable。

有没有解决方案?

3 个答案:

答案 0 :(得分:1)

这应该有效:

ngOnInit() {
    let guid = Guid.newGuid();
    this.getAll(guid);      
}

getAll(guid: Guid) {
    this.service.getAll(guid).subscribe(response => {
        if (response.Done != true) {
           this.serveData(response);
           this.getAll(guid); 
        }
     });
 }

真的不知道这背后的逻辑,但你可能应该去掉嵌套调用,因为你可能会重载你正在调用的API。

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为你正在寻找重试逻辑,样本在下面 -

ngOnInit(){

let guid = Guid.newGuid();

this.service.getAll(guid).subscribe(response => {

  if (response.Done != true) {
    retryWaitTime = 10;
    retryCount = 2;
    counter++;
    if (counter < retryCount) {
        $timeout(function () {
              this.serveData(response);
              //  this.service.getAll(guid) ....
             ,  retryWaitTime);
    } else {
      counter  = 0;
      //return error response
    }

  }

});