Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

74
Visualizações
Espere a resolver los bucles anidados en un texto mecanografiado.

Objetivo: quiero esperar a que se procesen todos los bucles anidados antes de poder devolver el valor final.

Problema: el valor final se devuelve antes de que se procesen todos los bucles.

En el siguiente código, envío paramListToComplete a un servicio de datos para crear un registro y obtener ese nuevo registro en la misma llamada, de modo que pueda establecer los valores faltantes en paramListToComplete y devolver paramListToComplete con los valores actualizados del servicio. El problema es que la función devuelve la lista antes de procesar todos los bucles, por lo que mi paramListToComplete permanece incompleto.

¿Alguien sabe cómo esperar a que se procesen todos los bucles o tal vez convertir todos estos bucles anidados en una promesa y esperar a que se resuelvan todos? Cualquier ayuda es apreciada.

 CompleteParamList(paramListToComplete): any { this.dataService.UpdateCall(paramListToComplete) .subscribe( data => { if (data) { for (var server of paramListToComplete) { for (var updatedData of data) { if (paramListToComplete.length === 1 && !server.Name) { server.Name = updatedData.Name; } if (!server.serverCode && server.Name === updatedData.Name) { server.serverCode = updatedData.serverCode; for (var serverGroup of server.serverGroups) { serverGroup.serverCode = updatedData.serverCode; } for (var updatedserverGroup of server.UpdatedserverGroups) { updatedserverGroup.serverCode = updatedData.serverCode; } } } } } } ); return paramListToComplete; } UpdateCall(bdy: Array<testParams>) { let url = 'endpoint/path'; let body = bdy; let options; return this.service.getToken() .map(Response => options = new RequestOptions({ headers: this.httpHelperService.buildHttpHeader(Response.json()) })) .mergeMap(() => this.http.put(url, body, options) .map(this.extractData) .catch((this.handleError))); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¡Ser flojo! no se suscriba al observable devuelto por el método UpdateCall en el método CompleteParamList ; en su lugar, devuélvalo y deje que la persona que llama se suscriba. Puede acceder a la transmisión y modificar el parámetro de entrada paramListToComplete y suponiendo que está en rxjs versoin 5 o inferior (para versiones más nuevas, puede canalizarlo), el código se verá así:

 completeParamList(paramListToComplete): Observable<void> { return this.updateCall(paramListToComplete).tap(data => { // update paramListToComplete here... }); }

así que ahora, donde sea que esté usando completeParamList , simplemente puede suscribirse o convertirlo en promesa (que no recomiendo ya que toPromise está obsoleto en la versión más nueva de rxjs)

 someMethod() { const paramList = []; this.service.completeParamList(paramList).subscribe(_ => { // paramList has been updated, do your thang here... }); } // alternative way async someOtherMethod() { const paramList = []; await this.service.completeParamList(paramList).toPromise(); // do your thang... }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda