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

Why is the value not assigned to a variable inside forEach in Angular?

如何让变量“this.qdDias”的return赋值给它。我不知道为什么当我使用 subscribe 时我无法获取方法末尾的值。在此“console.log(this.qdDias)”中,我看到了该值,但它在 return 中降低了,变量再次变为未定义。

> 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 超出订阅范围。但是,即使 return 位于 subscribe() 中,它仍然无法正常工作。您正在订阅一个本质上是异步的可观察对象 this.service.obterParametrosgeraisMap().subscribe()。但是您正试图将此函数视为同步函数。

this.service.obterParametrosgeraisMap() 是您可以订阅的 Observable 吗?那么应该是this.service.obterParametrosgeraisMap.

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

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

这可能有点工作,但您必须决定是否要 return 从中获取值的可观察值。或者你转换它并解决一个保持异步模式 或其他东西的承诺。

    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();
 });