首先删除一些行,然后在删除后插入其他行的功能出现问题

时间:2019-08-13 14:27:15

标签: angular typescript

我的应用程序中有一个组件,用户需要检查该组件是否有能力开发产品系列。为此,当用户在个人资料上时,他需要选中一些复选框,每个复选框代表一个家庭。

screen app

当用户提交表单时,我首先删除代表他的技能的所有行,例如:从合格的WHERE用户中删除= 7;

然后,我一一插入他的技能。

但是,我不知道为什么有时会在删除所有行之前插入行,并以bug结尾。

有人知道我该如何避免这个问题?

这是我提交表单时调用的方法:

onUpdateQualif(value: any) {
    //I delete all the lines here
      this.serviceQualif.deleteByOperateur(this.idOperateur).subscribe(data => data);
      var val = JSON.stringify(value);
      var values = val.split(",");
      var i = 1;
      for(let v of values){
        var debut = v.indexOf(":");
        var fin = v.indexOf("e");
        v = v.substring(debut+1, fin+1);
        if(v === "true"){
          var data = "{ \"operateur\" : " + this.idOperateur + " , \"famille\" : " + i+" }";
          var obj = JSON.parse(data);
//I insert the others one by one here.
this.serviceQualif.saveResource(this.serviceQualif.host+"/qualification", obj).subscribe(data => data);
        }
        i+=1
      }

1 个答案:

答案 0 :(得分:1)

您可以订阅您的http请求并等待其完成,然后再触发saveResource函数。引起此问题的原因是您要发送两个异步函数,因此很有可能在保存开始之前删除尚未完成。您应该订阅deleteService并等待其完成,然后再发送saveService。下面的示例:


    onUpdateQualif(value: any) {
        //I delete all the lines here
          this.serviceQualif.deleteByOperateur(this.idOperateur).subscribe(
        data => {//Do something with data},
        error => {
        //Error handle
        },
        () => {
           //this will fire once the deleteByOperateur has completed. So call your saveService in here and you won't run into problems.

          var val = JSON.stringify(value);
          var values = val.split(",");
          var i = 1;
          for(let v of values){
            var debut = v.indexOf(":");
            var fin = v.indexOf("e");
            v = v.substring(debut+1, fin+1);
            if(v === "true"){
              var data = "{ \"operateur\" : " + this.idOperateur + " , \"famille\" : " + i+" }";
              var obj = JSON.parse(data);
    //I insert the others one by one here.
    this.serviceQualif.saveResource(this.serviceQualif.host+"/qualification", obj).subscribe(data => data);
            }
            i+=1
        }
        );      
          }