首页 > 解决方案 > 仅当调用函数内部的回调并执行函数的其余部分时,如何调用另一个函数?

问题描述

我的角度代码

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

function save() {
}

现在我不想调用 this.save() 两次,我希望仅在执行回调以及执行方法中的剩余代码之后才调用它......当然,我可以解决这个问题跟随

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

save(){

}

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

标签: angulartypescriptobservable

解决方案


您可以滥用startWith()运算符来实现它。从文档

返回一个 Observable,它在开始发射源 Observable 发射的项目之前发射您指定为参数的项目。

尝试以下

import { startWith } from 'rxjs/operators';

getStatus (transferDTO) {
  this.queryResourceService.getInventoryStatusIdByStatusNameAndStatusTypeUsingGET(transferDTO)
    .pipe(startWith(0))
    .subscribe(
      response => {
        if (response === 0) {
          // run some independent code
        } else {
          // run dependent code
          this.save()
        }
      },
      error => { // handle error }
    );
}

确保传递给startWith()的值与源 observable 返回的实际值不同。


推荐阅读