2017-10-19 3 views
0

Supposons que j'ai ce schéma:Comment annuler une fois() manuellement dans Firebase?

{ 
    "movies": { 
    "movie-id-1": { 
     "title": "Rambo no. 5", 
     "description": "", 
     "genre": "genre-id-1" 
    } 
    }, 
    "genres": { 
    "genre-id-1": { 
     "name": "Action", 
     "description": "" 
    } 
    } 
} 

je dois commencer un auditeur child_added sur /movies:

const onMovieChildAdded = ref.child('movies').on('child_added', (movieSnap) => { 
    const movie = movieSnap.val() 

    ref.child(`genres/${movie.genre}`).once('value').then((genreSnap) => { 
    const genre = genreSnap.val() 
    console.log(movie.title, genre.name) 
    }) 
}) 

Dans le code ci-dessus, si un nouveau film est ajouté à la liste, je joue aussi une autre requête qui récupère son genre. La question est, si j'éteins l'auditeur child_added:

ref.child('movies').off('child_added', onMovieChildAdded) 

Comment puis-je annuler la once('value') à l'intérieur aussi bien?

Parce que parfois le rappel once('value') est toujours appelé même après avoir désactivé child_added.

+0

« une fois » ne devrait obtenir appelé ... une fois. –

+0

Si j'ai bien compris votre question, la méthode .once() arrêtera automatiquement d'écouter une fois que les données arrivent. Vous n'êtes pas obligé d'appeler .off(). –

+0

Je sais à ce sujet. Mais je veux l'annuler, c'est-à-dire ne pas continuer à exécuter le rappel après avoir appelé '.off ('child_added')'. Y a-t-il un moyen de l'annuler? Ou puisque c'est une promesse, il n'y a aucun moyen d'annuler? – jaye

Répondre

2

Un appel once sera toujours résolu, car JavaScript ne permet pas d'annuler les actions asynchrones en cours de vol. Vous souhaiterez plutôt revenir immédiatement du rappel once au lieu de prendre n'importe quelle action si le "annuler" s'est produit ailleurs.

Vous pouvez signaler ce, par exemple, définissant une variable canceled à true lorsque vous annulez et, à l'intérieur du rappel, en faisant:

if (canceled) return; 
+0

Cela semble être le seul moyen. J'ai lu que les promesses n'étaient pas annulables. – jaye