Angular subscribe value 始终给定值-1,真实1之前的值

Angular subscribe value is always given the value - 1, the value before the real one

我正在尝试在 .subscribe 完成后执行一个事件,因为它之后的代码取决于结果

verifBordereauExistBase(id: string) {
    return this._BourdereauService.get_one(id).subscribe(
        data = > {
            if (data.idBourdereau == null) {
                this.idBourdereauIsValid = false;
            } else {
                this.idBourdereauIsValid = true;
            }
        }, err = > {
            console.error(err)
        }, () = > {})
}

主要测试在这里

AddBordereautoList() {
  this.verifBordereauExistBase(this.idbordereaux);
  console.log(this.idBourdereauIsValid)
  if (Number.isNaN(Number(this.idbordereaux))) {
      this.notifier.notify('error', 'Format code a bare invalide');
  } else if (this.idbordereaux.length != 10) {
      this.notifier.notify('error', 'Format code a bare invalide');
  } else if (this.idBourdereauIsValid == false) {
      this.notifier.notify('error', 'Bordereau n\'existe pas ');
  } else {
      if (this.map.size == 0) {
          this.map.set(1, this.idbordereaux);
      } else {
          let x: number = this.verifexistbordereau(this.idbordereaux);
          if (x === 0) {
              this.map.set(this.map.size + 1, this.idbordereaux);
          } else {
              this.notifier.notify('error', 'Bordereau N°' + this.idbordereaux + 'existe deja dans la liste!');
          }
      }
  }
  this.idbordereaux = "";
}

我正在执行这段代码,this.idBourdereauIsValid 的值落后一步,它给我的值 - 1 总是

this.verifBordereauExistBase(this.idbordereaux); 下的代码可能在 this.verifBordereauExistBase(this.idbordereaux); 有机会 return 之前执行。为确保它确实如此,请将 AddBordereautoList() 代码添加到 .subscribe 完整步骤:

verifBordereauExistBase(id: string) {
    return this._BourdereauService.get_one(id).subscribe(
        data = > {
            if (data.idBourdereau == null) {
                this.idBourdereauIsValid = false;
            } else {
                this.idBourdereauIsValid = true;
            }
        }, err = > {
            console.error(err)
        }, () = > {
            console.log(this.idBourdereauIsValid)
            if (Number.isNaN(Number(this.idbordereaux))) {
                this.notifier.notify('error', 'Format code a bare invalide');
            } else if (this.idbordereaux.length != 10) {
                this.notifier.notify('error', 'Format code a bare invalide');
            } else if (this.idBourdereauIsValid == false) {
                this.notifier.notify('error', 'Bordereau n\'existe pas ');
            } else {
                if (this.map.size == 0) {
                    this.map.set(1, this.idbordereaux);
                } else {
                    let x: number = this.verifexistbordereau(this.idbordereaux);
                    if (x === 0) {
                        this.map.set(this.map.size + 1, this.idbordereaux);
                    } else {
                        this.notifier.notify('error', 'Bordereau N°' + this.idbordereaux + 'existe deja dans la liste!');
                    }
                }
            }
            this.idbordereaux = "";
        })
}