angular中因异步问题产生的错误解决方法

时间:2023-03-10 01:10:11
angular中因异步问题产生的错误解决方法
方法一
private userTaskList(){
  let auth = this.make_basic_auth("kermit","kermit");
  this.httpc.get("http://localhost:8080/activiti-rest-test/service/runtime/tasks?assignee="+this.user,{//列出当前用户的任务
  headers:{'Authorization' : auth}
}).mergeMap(val=>{
  let tasks:Array<any> = val['data'];
  let task:any = tasks[tasks.length-1];
  let tid:string=task.id;
  return this.httpc.post("http://localhost:8080/activiti-rest-test/service/runtime/tasks/"+tid,{ //提交审批的同时 让申请人完成任务
  "action" : "complete",
"variables": [
    {
      "name":"detoxCenterApproval",
      "value":this.detoxCenterApproval
    }
  ]
},{
    headers:{'Authorization' : auth}
  });}).subscribe(val => console.log(val),
  error =>{ },
  () => {}
  );
}
方法二 用promise
  
  let prOrg=this.orgTreeData.reloadPageIfNeed();
  let prPerson=this.personTreeData.reloadPageIfNeed();
  Promise.all([prOrg,prPerson]).then(s=>{ //数据加载完成后再调用方法
  this.orderOrgTreeData = this._convertRows2Subtree();});
 将observeble对象转成promise在调用then....then......then........................................链式调用  主要用于下一个方法用到上一个方法获取的值
   private getProSysProjectUrl():Promise<boolean>{
return this.toolService.getGlobalContext().toPromise().then(s => {
let val = <any>s;
this.proSysProjectUrl = val.proSysProjectUrl;
return true;
})
}
private listHistoryTasks(){ //列出历史任务实例
this.getProSysProjectUrl().then(s => {
this.httpc.get(this.proSysProjectUrl+"/service/history/historic-task-instances?taskAssignee="+this.user,{
headers:{'Authorization' : this.auth}
}
).subscribe(val => {
let ues:Array<any> = val['data'];
for(let u of ues){
let tempClass = new HistoryTaskField();
tempClass.id = u.id;
tempClass.name = u.name;
tempClass.startTime = u.startTime;
tempClass.endTime = u.endTime;
this.historyTaskFieldClasses.push(tempClass)
}
this.getPages();
this.pageShow();
},
error =>{ },
() => {}
);
}); }