如何在以角度2移动到另一个任务之前完成api调用

时间:2017-08-01 20:35:39

标签: angular ionic2

我正在使用角度2和离子2.我正在调用一个完全没有返回数据的api,它启动另一项任务。如何在进入下一步之前完成通话。

服务

@Injectable()
export class AbsconderService {

  constructor(public http: Http) {
    console.log('Hello AbsconderService Provider');
  }

  getAbsconders() {
        var url = 'http://someservice/admin_backend/public/Api_abscounders';
        var response = this.http.get(url).map(res => res.json());
        return response;
    }

}
控制器中的

getData() {
    this.absService.getAbsconders()
      .subscribe(data => {
        this.Records = data;
        console.log(this.Records.data);
      })
  }

ionViewDidLoad() {
    console.log('ionViewDidLoad Absconders');
    this.Records = this.getData();
    this.setFilteredItems(); // before above call finishes, this run in between and then again this.getData() is filling this.Records


    })
  }

2 个答案:

答案 0 :(得分:2)

如果可能,请将代码移至subscribe中:

getData() {
    this.absService.getAbsconders()
      .subscribe(data => {
        this.Records = data;
        console.log(this.Records.data);
        this.setFilteredItems();   //<- Moved it here.
      })
  }

这样在调用完成之前它就不会执行。

答案 1 :(得分:0)

这看起来有点短

    var response = this.http.get(url).map(res => res.json());

this.http.get(url)可能是异步调用。在这种情况下,您可能需要.then或回调才能通过map