我的应用程序中有一个组件,用户需要检查该组件是否有能力开发产品系列。为此,当用户在个人资料上时,他需要选中一些复选框,每个复选框代表一个家庭。
当用户提交表单时,我首先删除代表他的技能的所有行,例如:从合格的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
}
答案 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
}
);
}