首页 > 解决方案 > 角度订阅值总是被赋予值 - 1,即真实值之前的值

问题描述

我正在尝试在.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 总是

标签: angularhttpsangular6angular-servicessubscribe

解决方案


this.verifBordereauExistBase(this.idbordereaux);可能正在执行的代码之前this.verifBordereauExistBase(this.idbordereaux);有机会返回。为确保这样做,请将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 = "";
        })
}

推荐阅读