Como fazer o forEach esperar até que a assinatura termine?

Alif Fitri

Estou usando o Angular 6 e meu banco de dados é Firebase. Agora tento mostrar os nomes de cada sala de acordo com sua construção. Por exemplo:

Building A
Room 1
Room 2
Building B
Room 1
Room 2

Mas toda vez que tento, ele mostra todos os nomes dos prédios primeiro, e só depois os nomes dos quartos. Isso é o que eu tenho agora:

Building A
Building B
Room 1
Room 2

Descobri que isso acontece porque forEachfica pulando a subscribefunção.

Tentei usar promisee await, mas não funciona. Talvez porque eu usei de forma errada? Não tenho certeza de como usar de promisemaneira correta.

async loadData(){
    this.navigationService.user
        .subscribe( user => {
        console.log(user);
        this.user = user;
        this.navigationService.getBuildings(this.user.orgId)
            .subscribe( building => {
            this.navMasterBuilding = [];
            this.buildings = building;
            this.buildings.forEach( async building2 => {
                this.completeBuildingId = building2.completeBuildingId;
                this.buildingName = building2.buildingName;
                console.log(building2.buildingName);
                await new Promise ((resolve, reject) => { 
                    this.navigationService.getLocation(this.user.orgId, this.completeBuildingId)
                    .subscribe(location => {
                    console.log('room' + location);
                    this.navMasterLocation = [];
                    });
                    resolve();
                });   
            });
        });
    });
}

Tentei atrasar usando setTimeout, mas ainda não funciona.

David Walschots

Array.forEachsó funciona com funções síncronas. Mude-o para usar a for...ofsintaxe que funciona. Ao lado disso, você resolveo Promiseantes da chamada para getLocationterminar e o código ser subscribeexecutado. Altere o código para chamar resolvedentro do getLocation.subscribe.

for(const building2 of buildings) {
    console.log(building2.buildingName);
    await new Promise ((resolve, reject) => { 
        this.navigationService.getLocation(this.user.orgId, this.completeBuildingId)
            .subscribe(location => {
                console.log('room' + location);
                this.navMasterLocation = [];

                resolve();
             });                    
    });   
}

Observe que isso pode ser simplificado para:

for(const building2 of buildings) {
    console.log(building2.buildingName);
    const location = await this.navigationService.getLocation(this.user.orgId, this.completeBuildingId).toPromise();
    console.log('room' + location);
    this.navMasterLocation = [];             
}

Observe também que não tenho certeza de por que você usa em this.completeBuildingIdvez de uma variável local. Visto que ele é sobrescrito a cada iteração, isso parece um pouco inútil para mim.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como fazer o jQuery esperar até que uma animação termine?

Como fazer o Gulp esperar até que o arquivo dest termine?

Como fazer um script python esperar até que o download termine

Como fazer JS esperar até que a execução do protocolo termine

Como posso esperar até que a assinatura termine antes de retornar um valor de outra função

Faça uma função Angular esperar que a assinatura termine

Como esperar que o JavaScript termine no dramaturgo

Como esperar que o construtor termine?

Como esperar que a função termine no SwiftUI?

Como fazer o retorno esperar que a conexão do MySQL termine? Node.js

Como fazer Jest esperar que todo o código assíncrono termine a execução antes de esperar uma asserção

CMake: como fazer execute_process esperar que o subdiretório termine?

Como esperar que uma execução termine antes de fazer a próxima linha

Como fazer Capivara / Poltergeist esperar que a navegação iniciada por js termine?

Como fazer a API de downloads do Chrome esperar até que o download termine?

Como posso forçar a função de esperar até que o código foreach termine em nodejs?

Como fazer tarefas paralelas e esperar que uma tarefa termine

Como esperar que o SparkContext termine todo o processo?

Como não esperar que a função termine python

Como não esperar uma função até que ela termine?

Como não esperar uma função até que ela termine?

Como faço para esperar que uma promessa em loop termine antes de fazer alguma outra coisa?

Assinatura simples dentro do resolvedor em Angular 11. Como esperar até que a assinatura seja concluída para que eu possa fazer uma comparação de dados

Como posso esperar que o form2 termine?

Como esperar que a função termine na rota expressa

Como esperar que um fio de reflexão termine

Como esperar que todo o assíncrono termine?

Como NÃO esperar que um thread termine em Python

Como esperar que o processo termine usando IO.popen?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo