为什么在 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();
});
如何让变量“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();
});