2011-04-16 2 views
1

En admettant que j'ai un objet Array semblable qui permet de chaîner des méthodes comme si:Finaliser/post-traitement méthodes chaîne

var ds = new DataSet(items); 
var subset = ds.filter(condition1).filter(condition2); 

Est-il possible d'exécuter du code après la dernière méthode de la chaîne a été traité - sans avoir à ajouter manuellement un appel de méthode .finalize() (ou end/execute/...) séparé? Je crois que j'ai déjà vu ça quelque part, mais je ne me souviens pas des détails. Peut-être que les futures/promesses/reports seraient utiles ici - mais je ne sais pas vraiment comment, puisque je finis toujours avec le besoin de «regarder dans le futur» pour déterminer si un appel de méthode est le dernier dans la chaîne.

Répondre

1

Si vous contrôlez la méthode filter, il peut être une idée d'ajouter un paramètre Finaliser?

.filter(condition,[some finalizer function]); 

dans filter:

if (finalizer){ 
    finalizer(); 
} 

[modifier en fonction de commentaire]

Une autre approche pourrait être de permettre une condition de finaliseur, donc dans .filter(condition), le contenu de condition définit la besoin de finaliser.

Quelque chose comme (je ne sais pas le type de votre état, juste faire les choses):

if (condition.match('f=true')) { 
    finalizer(); 
} 
+0

Eh bien, oui, mais ce n'est pas très différent de l'ajout d'un appel de méthode - Je suis curieux de savoir si il est possible du tout d'éviter cette étape manuelle. – AnC

+0

Voir mes modifications ... – KooiInc

+0

J'apprécie votre saisie - cependant, déplacer l'indicateur de finaliser/déclencher dans la condition ne semble pas différent d'ajouter un appel de méthode de fin. (Les conditions seraient des choses banales comme "> 3" ou "commence par 'foo'") – AnC

Questions connexes