如何返回变量"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();
});