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........................................链式调用  主要用于下一个方法用到上一个方法获取的值
 1   private getProSysProjectUrl():Promise<boolean>{
 2       return  this.toolService.getGlobalContext().toPromise().then(s => {
 3             let val = <any>s;
 4             this.proSysProjectUrl = val.proSysProjectUrl;
 5             return true;
 6         })
 7     }
 8     private listHistoryTasks(){   //列出历史任务实例
 9         this.getProSysProjectUrl().then(s => {
10                 this.httpc.get(this.proSysProjectUrl+"/service/history/historic-task-instances?taskAssignee="+this.user,{
11                     headers:{'Authorization' : this.auth}
12                 }
13             ).subscribe(val => {
14                     let ues:Array<any> = val['data'];
15                     for(let u of ues){
16                         let tempClass = new HistoryTaskField();
17                         tempClass.id = u.id;
18                         tempClass.name = u.name;
19                         tempClass.startTime = u.startTime;
20                         tempClass.endTime = u.endTime;
21                         this.historyTaskFieldClasses.push(tempClass)
22                     }
23                     this.getPages();
24                     this.pageShow(); 
25                 },
26                 error =>{ },
27                 () => {}
28             );
29         });
30      
31     }
 
 
 
 
原文地址:https://www.cnblogs.com/Samuel-Leung/p/9333796.html