首页 > 解决方案 > Angular/Typescript - 布尔变量未在 .subscribe 上更新

问题描述

我在服务器端有这个功能,暂时被迫返回true:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
        [HttpGet("cPasaAJefeVentas")]
        public async Task<IActionResult> CPasaAJefeVentas(string idPais, string idCompania, string idSalesorg, string idDivision, string idUser, decimal porcentaje)
        {
          
            return Ok(true);

        }

这是您在服务内的客户端调用它的方式:

cPasaAJefeVentas(idPais: string , idCompania:string, idSalesOrg:string, idDivision:string, idUser:string, porcentaje:number) {
        return this.http.get(this.altapedidosserveruri + 'cPasaAJefeVentas?=' + idPais + '&idCompania=' + idCompania + '&idSalesOrg=' + idSalesOrg + '&idDivision=' + idDivision + '&idUser=' + idUser + '&porcentaje=' + porcentaje);
    }

这是我现在遇到问题的地方:

 cPasaJefeVentas(): boolean {
    let descuentoDiscrecional: number = 5;
    let res: boolean = null;
    this.altaPedidosService
      .cPasaAJefeVentas(this.pedidoObjeto.idPais, this.pedidoObjeto.idCompania,
        this.pedidoObjeto.idSalesOrg, this.pedidoObjeto.idDivision, this.loggedService.logged.UserName, descuentoDiscrecional)
      .subscribe((result: boolean) => (
        console.log(result),
        res = result
      ))
    return res;
  }

console.log(result) 打印 TRUE,这是正确的,但是我想将该返回值分配给“res”变量,但它不起作用,因为它在退出 .susbscribe 时仍然为空。

我想知道我在这里做错了什么?为什么“res”变量的值没有像它应该的那样更新?

标签: angulartypescript.net-coreangular-httpclient

解决方案


您的服务正在返回一个Observable响应。Observables 是异步的,您无法保证何时会收到响应。因此,修改您的方法以返回Observable响应。你的代码会被这样修改

 cPasaJefeVentas(): Observable<boolean> {
    let descuentoDiscrecional: number = 5;
    let res: boolean = null;
    let response$ = this.altaPedidosService
      .cPasaAJefeVentas(this.pedidoObjeto.idPais, this.pedidoObjeto.idCompania,
        this.pedidoObjeto.idSalesOrg, this.pedidoObjeto.idDivision, this.loggedService.logged.UserName, descuentoDiscrecional)
      .subscribe((result: boolean) => (
        console.log(result),
        res = result
      ));
      
      return response$;
  }

在模板中,您可以应用异步管道来显示可观察值,例如

<p>{{cPasaJefeVentas() | async}}</p>

推荐阅读