2017-07-07 7 views
0

Notre plate-forme: plate-forme IBM Bluemix, Conversation IBM Watson, client MOU. Le code est déployé dans le runtime Node.js.Conception de modules pour les micro-services dans Node.js; voudrait peser des choix et obtenir des exemples plus spécifiques

Nous avons un bot simple qui sert de médiateur d'une conversation entre un utilisateur SLACK et un service IBM Watson. La conversation permet à l'utilisateur de spécifier des composants de requête pour obtenir des données de facturation ou des données de coût à partir des services principaux. Fonctionne bien, pour les petits ensembles de données ....

Nous voulons que notre bot gère des ensembles de données plus importants provenant du service principal. Le cas d'utilisation que nous recherchons ici: SLACK L'utilisateur interagit avec la conversation Watson, fournit l'entrée de requête nécessaire, exécute la requête, les résultats de la requête sont transformés en fichier CSV (feuille de calcul) et stockés dans le gestionnaire de contenu BOX. Une fois le travail terminé, l'utilisateur reçoit une notification dans SLACK que les données sont dans le fichier Box, avec le lien fourni. En tant que programmeur novice Node.js, je ne sais pas très bien comment structurer les composants pour gérer ce type d'échange asynchrone. Mon intuition me dit que je devrais créer des fonctions pour gérer les tâches discrètes: 1) appeler le service distant et ramener les données, 2) encapsuler les données au format CSV, 3) créer un fichier dans BOX, retourner le lien, 4) notifier l'utilisateur SLACK avec message y compris le lien vers le fichier de données dans la boîte. Mes recherches m'indiquent que je devrais utiliser les promesses de Node, mais je ne sais pas exactement comment décomposer les choses ou comment «promettre» les choses pour qu'elles fonctionnent ensemble comme prévu. Est-ce ce que je devrais poursuivre? Si c'est le cas, un bon exemple serait apprécié.

Répondre

0

SI vous voulez suivre ces étapes, vous pouvez utiliser async ou, Promise, voir un exemple:

function csvFunc(params) { 
    return new Promise(function(resolve, reject) { 
    //do something CSV 
    }); 
} 

function boxManager(params) { 
    return new Promise(function(resolve, reject) { 
    //do something box, create box 
    }); 
} 

Promise.all([csvFunc(params), boxManager(params)]) //add the functions what you want, 
    .then(function(allData) { //after all functions are Ok, then.... 
     // return the value for slack or what you want to do 
     console.log("All functions have perfomed") 
    }); 
+0

Merci Sayuri-san; J'ai étudié la technique que vous avez recommandée. Je crois que le Promise.all ([list]) ... exécutera toutes les fonctions dans Parallel. Ce que je dois faire est d'exécuter chaque appel asynchrone séquentiellement, en passant les résultats de chaque appel à la fonction successive suivante: getData()> transformDataToCSV()> recordDataInBOX> return avec le lien Notifier le client SLAcK avec le lien vers les données I crois que je dois faire quelque chose comme ceci: getData() .alors (transformDataToCSV()) .alors (recordDataInBOX()) .alors (notifySLACKClient()) – JamesD

+0

, utilisez async pour cela, mais la promesse peut être utilisé comme ton exemple –