Je cherche une bonne approche pour parfois mettre en pause une action (fonction/appel de méthode) jusqu'à ce que l'utilisateur confirme qu'il veut faire une partie spécifique de cette action. Je dois le faire dans un environnement qui ne permet pas l'arrêt de l'exécution de code (ActionScript dans mon cas, mais une approche pour JavaScript doit être identique).Demander une confirmation au milieu d'un processus
Pour illustrer, ceci est une maquette de l'action avant d'introduire l'invite utilisateur:
<preliminary-phase> // this contains data needed by all the following phases //
<mandatory-phase> // this will be always be executed //
<optional-phase> // this will always execute too, if in this form, but in some cases we need to ask the user if he wants to do it //
<ending-phase> // also mandatory //
Ce que j'ai besoin est d'insérer une invite utilisateur conditionnel, un « Voulez-vous faire cette partie? ", et faire <optional-phase>
seulement si l'utilisateur veut.
<preliminary-phase>
<mandatory-phase>
if(<user-confirmation-is-needed> and not <user-response-is-positive>){
<do-nothing>
}
else{
<optional-phase>
}
<ending-phase>
Lorsque vous essayez de le faire dans ActionScript/JavaScript Je suis quelque chose comme ceci:
<preliminary-phase>
<mandatory-phase>
if(<user-confirmation-is-needed>){
askForConfirmation(callback = function(){
if(<user-response-is-positive>)
<optional-phase>
<ending-phase>
});
return;
}
<optional-phase>
<ending-phase>
Maintenant, les deux <optional-phase>
et <ending-phase>
sont dupliquées. Aussi parce qu'ils utilisent des objets créés dans <preliminary-phase>
je ne peux pas les déplacer vers des fonctions externes sans passer toutes les données à ces fonctions.
Ma solution actuelle est que je joint chacun des <optional-phase>
et <ending-phase>
dans certaines fonctions locales (afin qu'ils aient accès aux données <preliminary-phase>
) déclarés avant que je demande confirmation et j'appeler ces fonctions au lieu de dupliquer le code, mais il ne semble pas correct que le code ne soit plus dans l'ordre où il est exécuté.
Que recommanderiez-vous? Remarques:
1. askForConfirmation
est une fonction non bloquante. Cela signifie que le code qui suit son appel est exécuté immédiatement (c'est pourquoi j'ai un return;
dans mon approche).
+1 pour le motif de commande. Je vais regarder dedans. –