Node.js synchrone invite
Je suis en utilisant le invite bibliothèque pour Node.js et j'ai ce code:
var fs = require('fs'),
prompt = require('prompt'),
toCreate = toCreate.toLowerCase(),
stats = fs.lstatSync('./' + toCreate);
if(stats.isDirectory()){
prompt.start();
var property = {
name: 'yesno',
message: 'Directory esistente vuoi continuare lo stesso? (y/n)',
validator: /y[es]*|n[o]?/,
warning: 'Must respond yes or no',
default: 'no'
};
prompt.get(property, function(err, result) {
if(result === 'no'){
console.log('Annullato!');
process.exit(0);
}
});
}
console.log("creating ", toCreate);
console.log('\nAll done, exiting'.green.inverse);
Si l'invite est de montrer, il semble que cela ne bloque pas l'exécution de code mais l'exécution se poursuit et les deux derniers messages de la console sont affichés pendant que j'ai encore à répondre à la question.
Est-il un moyen de faire de blocage?
OriginalL'auteur Matteo Pagliazzi | 2012-08-20
Vous devez vous connecter pour publier un commentaire.
Depuis IO Nœud ne bloque pas, vous n'allez pas trouver un moyen facile de faire quelque chose comme ceci synchrone. Au lieu de cela, vous devez placer le code dans la fonction de rappel:
ou bien extraire et à appeler l'extrait de fonction:
Node.js est, de par sa nature, asynchrone. Si ce n'est pas un bon modèle pour votre application particulière, il se peut que le Nœud n'est pas tout à fait le bon choix de la technologie pour que les cas d'utilisation particulier. Il faut vraiment être prêt à accepter la nature asynchrone de l'encadrement (des outils comme le contrôle de flux des bibliothèques et de motifs, comme des générateurs de fonctions d'une grande aide).
j'ai refait un peu le code, vraiment l'amour de nodejs non blocage i/o pour la plupart des cas, mais maintenant, je suis en train de construire un petit utilitaire en ligne de commande et d'avoir un peu de problèmes avec elle depuis de nombreux cas, si toutes les opérations ne devraient suivre un ordre dans cette partie du script et à l'aide de la fonction de rappel n'est pas toujours possible. connaissez-vous des bons de contrôle de flux des bibliothèques ou des modèles?
Je suis dans une situation similaire, en essayant de créer un Nœud outil similaire à Thor actions. J'aime vraiment le async de la bibliothèque;
series
etwaterfall
peut être particulièrement utile pour cette tâche particulière.Après de déconner avec elle, je ne suis pas sûr async aide vraiment tout. Jetez un oeil à ce Gist et voir si elle fait aucun sens: gist.github.com/77ce3468303351c06f29
OriginalL'auteur Michelle Tilley
Avec flatiron rapidement à la bibliothèque, malheureusement, il n'existe aucun moyen d'avoir le code de blocage. Cependant, je propose mon propre
synchronisation invite
de la bibliothèque. Comme son nom l'indique, il permet de façon synchrone invite les utilisateurs pour l'entrée.Avec elle, vous souhaitez simplement émettre un appel de fonction, et de revenir à l'utilisateur de ligne de commande d'entrée:
Alors, donnez-lui un essai, si vous le souhaitez.
Garder à l'esprit: NE PAS utiliser sur des applications web. Il doit être utilisé uniquement sur les applications en ligne de commande.
Ne peut pas être installé sur Ubuntu 14.04.
node-gyp rebuild
OriginalL'auteur Sal
Depuis Node.js 8, vous pouvez effectuer les opérations suivantes à l'aide de async/await:
OriginalL'auteur macalaca
Vorpal.js est une bibliothèque que j'ai faite qui a récemment été libéré. Il fournit synchrone de l'exécution d'une commande avec une invite de commandes, comme vous le demandez. Le code ci-dessous à faire ce que vous demandez:
Ci-dessus, l'invite de revenir après un deuxième est en place (seulement après callback est appelée).
Wow, je dois avoir brainfarted. J'ai montré une async exemple à la place d'une synchronisation. J'ai modifié pour inclure la synchronisation de la version.
OriginalL'auteur dthree
Vieille question, je sais, mais je viens de trouver l'outil idéal pour cela. readline-sync vous donne un synchrones façon de recueillir la saisie de l'utilisateur dans un nœud de script.
C'est très simple à utiliser et ne nécessite pas de dépendances (je ne pouvais pas utiliser la synchronisation invite à cause de gyp).
De l'github readme:
Je ne suis pas affilié avec le projet en aucune façon, mais il vient de faire ma journée, alors je me devais de partager.
OriginalL'auteur Dominic P
Je suis tombé sur ce fil et toutes les solutions:
Et pour cette raison, j'ai créé
syncprompt
. L'installer avec
npm i --save syncprompt
et puis il suffit d'ajouter:Par exemple, ce qui vous permettra de le faire:
Il prend également en charge les invites pour les mots de passe:
OriginalL'auteur Downgoat