J'ai une entrée angulaire où chaque fois que sa valeur change, je demande au service d'obtenir des données sur la valeur entrée. Je me soucie seulement de la dernière entrée entrée, donc quand l'utilisateur entre '1', mais l'efface et entre '2' je ne me soucie pas des données sur la valeur précédente. J'ai écrit quelque chose comme ça (je garde la valeur de la demande précédente prevNr):Annuler les données entrantes à partir de Observable
let stream,
nr = document.querySelector('input').value;
if (status === `${nr} in progress`) {
stream.unsubscribe();
console.log(`subscription of ${prevNr} cancelled`)
}
status = 'in progress';
prevNr = nr;
console.log(`started subscription of ${nr}`)
stream = someService.someMethod.subscribe(() => {
const clonedNr = nr;
setTimeout(() => {
status = 'done';
console.log(`received response for ${clonedNr}`)
}, 12000);
})
Ce que je reviens dans la console est
1 in progress
subscription of 1 cancelled
2 in progress
subscription of 2 cancelled
3 in progress
subscription of 3 cancelled
4 in progress
received response for 1
received response for 2
received response for 3
received response for 4
En ce moment, je me moque réponse par setTimeout(), mais je peux Imaginez une situation où je reçois des données pour l'entrée 4 avant les données pour l'entrée 3 et, par conséquent, ces données seront affectées à une mauvaise entrée. Comment puis-je omettre les demandes précédentes dans Observable? Est-ce possible?
La troisième fonction de rappel en subscribe est pour [achevé] (http://reactivex.io/rxjs/class/es6/Subscriber.js~Subscriber.html) – Dhyey