为什么这个值没有在Angular的forEach中分配给一个变量?



如何返回变量"this.qdDias"给它赋值。我不知道为什么当我使用订阅时,我无法在方法结束时获得值。在这个console.log(this. qddias) "我看到了值,但是它在返回值中变小了,变量再次变为未定义

> obterParametroPrazoMap(nomePrazo: string): number {
>         console.log("Parametro vindo: ", nomePrazo)
>         this.service.obterParametrosgeraisMap().subscribe((data) => {
>             this.listParametrosGerais = data.data;
>             this.listParametrosGerais.forEach((x) =>  (this.listParametrosGerais, x));
>             for (var i = 0; i < this.listParametrosGerais.length; i++) {
>                 console.log("comparado: ", this.listParametrosGerais[i].chavePrimaria.tipoParametro.nomeTipoParametro)
>                 if (this.listParametrosGerais[i].chavePrimaria.tipoParametro.nomeTipoParametro
> === nomePrazo) 
>                 {   
>                     this.qdDias = this.listParametrosGerais[i].quantidadeDiasPrazo;
>                     console.log(this.qdDias)                    
>                     break
>                 }
>             }
>         }                   
>         );
>        return this.qdDias;
>     }

如何解决这个问题?

return this.qdDias不在订阅范围内。但是,即使返回是在subscribe()中,它仍然不起作用。你正在订阅一个可观察的this.service.obterParametrosgeraisMap().subscribe(),它本质上是异步的。但是你试图把这个函数当作同步的。

this.service.obterParametrosgeraisMap()是一个可以订阅的可观察对象吗?那么应该是this.service.obterParametrosgeraisMap

这是做什么的?this.listParametrosGerais.forEach((x) => (this.listParametrosGerais, x));

为什么使用var?应该是const还是let?

这在某种程度上可以工作,但你必须决定是否要返回一个可观察对象,从中获取值。或者你转换它并解析一个保持异步模式的承诺https://stackoverflow.com/a/42185519/15439733或其他东西。

function obterParametroPrazoMap(nomePrazo: string): number {
console.log('Parametro vindo: ', nomePrazo);
let map;
this.service.obterParametrosgeraisMap.pipe(take(1)).subscribe(data => map = data);
this.listParametrosGerais = map?.data;
this.listParametrosGerais.forEach((x) => (this.listParametrosGerais, x));
for (var i = 0; i < this.listParametrosGerais.length; i++) {
console.log('comparado: ', this.listParametrosGerais[i].chavePrimaria.tipoParametro.nomeTipoParametro);
if (this.listParametrosGerais[i].chavePrimaria.tipoParametro.nomeTipoParametro === nomePrazo) {
this.qdDias = this.listParametrosGerais[i].quantidadeDiasPrazo;
console.log(this.qdDias);
break;
}
}
return this.qdDias;
}

我是这样解决的:

Promise.resolve(2);
        Promise.all([
           this.service.obterParametrosgeraisMap()
                .then((lista: any) => {
                    this.listParametrosGerais = lista.data;
                })
            ,
this.service.obterParametrosEspecificosMap()
                .then((lista: any) => {
                    this.listParametrosEspecifico = lista.data;
                })
        ]).then(() => {    
            this.iniciarVariaveisDicionario();
});

最新更新