Angular 如何仅在调用函数内部的回调并执行函数的其余部分时调用另一个函数?

Angular 如何仅在调用函数内部的回调并执行函数的其余部分时调用另一个函数?,angular,typescript,observable,Angular,Typescript,Observable,我的角码 getStatus(transferDTO){ this.queryResourceService.getInventoryStatusIdByStatusNameAndStatusTypeUsingGET(transferDTO).subscribe( this.save() ); /* Remaining code here */ this.save() } function save() { } 现在我不想调用这个.save()两次,我只希望

我的角码

getStatus(transferDTO){
  this.queryResourceService.getInventoryStatusIdByStatusNameAndStatusTypeUsingGET(transferDTO).subscribe(
    this.save()
  );
  /*
  Remaining code here 
  */
  this.save()
}

function save() {
}
现在我不想调用这个.save()两次,我只希望在执行回调以及执行方法中的剩余代码之后调用它。。。 当然,我可以通过以下方式解决这个问题

getStatus(transferDTO){
  /*
  Remaining code here 
  */
  this.queryResourceService.getInventoryStatusIdByStatusNameAndStatusTypeUsingGET(transferDTO).subscribe(this.save());
}

save(){

}
但是我不想延迟回调方法。那么我该如何解决这个问题呢?

您可以滥用操作符来实现它。从文件中

返回发出指定为参数的项的可观察项 在它开始发射由可观测源发射的项之前

试试下面的方法

从'rxjs/operators'导入{startWith};
获取状态(传输到){
this.queryResourceService.getInventoryStatusIdByStatusNameAndStatusTypeUsingGET(传输到)
.管道(起点(0))
.订阅(
响应=>{
如果(响应===0){
//运行一些独立的代码
}否则{
//运行相关代码
这个。save()
}
},
错误=>{//句柄错误}
);
}

确保传递给
startWith()
的值与源可观察对象返回的实际值不相似。

如果您只想
getInventoryStatusIdByStatusNameAndStatusTypeUsingGET
和“剩余代码”并行执行,然后在两者完成后调用
save()
,您可以将“剩余代码”在一个可观察对象中,用于并行执行两个可观察对象

大概是这样的:

getStatus(transferDTO) {
  const getStatusId$ = this.queryResourceService.getInventoryStatusIdByStatusNameAndStatusTypeUsingGET(transferDTO);
  const remainingCode$ = this.getRemainingCode();

  forkJoin(
    getStatusId$,
    remainingCode$
  ).subscribe(res => {
    this.save();
  });
}

getRemainingCode(): Observable<null> {
  return new Observable(subscriber => {
    /*
    Remaining code here 
    */
    subscriber.next();
    subscriber.complete();
  })
}
getStatus(transferDTO){
const getStatusId$=this.queryResourceService.GetInventoryStatusIDByStatusName和StatusTypeUsingGet(transferDTO);
const remainingCode$=this.getRemainingCode();
分叉连接(
getStatusId$,
剩余代码$
).订阅(res=>{
这是save();
});
}
getRemainingCode():可观察{
返回新的可观察对象(订户=>{
/*
此处剩余代码
*/
subscriber.next();
subscriber.complete();
})
}

正确格式化代码,是否调用此。save()函数subscribe方法何时完成其响应?@PrashantPimpale Yes,剩余代码也应在调用time save函数时完成。如果有需要的数据块,它将运行,则可以将依赖代码包装在其中。您可以将剩余代码包装在承诺的subscribe方法中并调用save()吗来自同一块的方法?@ShrutikaPatil我当然可以,但是我会毫无必要地等待调用,以便执行一些独立的代码