私はnodeJSで私の最初のアプリケーションを書いています。私は電報のボットを書いています。私はそれが非同期の性質を持っているので、アプリケーションの流れをどのように制御するのかと思っていました。私は、すべてがシンプルで手続き的なPHPバックグラウンドから来ています。NodeJSでのアプリケーションの流れを制御する方法
私のボットでは、メッセージが受信されると、先に進む前にまずプログラムがユーザーの詳細がキャッシュまたはデータベースにあることを確認する必要があります。チェックが終わったら、それを進めることができます。
私はフラグの変数を使ってこれを行うつもりでしたが、javascriptの非同期性のためにできません。私はこのことをどうやってやるのか分かりません。オブジェクトにリスナーを割り当て、フローを制御するイベントを発行しますか?ここで
が私のコードであるconst fs = require('fs');
// Establish connection with cache and database
const mysql = require('mysql-wrapper');
const Memcached = require('memcached');
const memcached = new Memcached('localhost:11211');
const bb = require('bot-brother');
var settings = {
host: 'localhost',
database: 'test',
user: 'root',
};
var qb = require('node-querybuilder').QueryBuilder(settings, 'mysql', 'single');
//Load the database cache functions
const dbc = require("./dbc");
dbc.memcached = memcached;
dbc.mysqc = qb;
//Load the user handling functions
const user = require("./user");
user.dbc = dbc;
const bot = bb({
key : '331263599:AAHmLl4Zcg4sKGnz7GNzacgkJl1W8lwz33c',
polling: { interval: 0, timeout: 1 }
});
//code that checks user existence in cache/db
bot.api.on('message', (msg)=>{
console.log(msg.from);
var userData = msg.from;
var tid = userData.id;
//Check if user is in cache
user.check_user_existence(tid,function(re){
if(re < 2){
user.complete_user_existence(re,userData,function(err,response){
if(err){
bot.api.sendMessage(tid,"Sorry an unexpected error occured!");
} else {
console.log('ha');
play = 1;
}
});
}
});
});
//Code to be run after checking
if(play==1){
send_another_message();
do_some_things();
}
node.js(または一般的なJavaScript)でasync/awaitと約束をどのようにするかを見てみたいかもしれません。 ここで少し紹介します: https://blog.readme.io/using-async-await-in-node-js-7-6-0/ – LongHike
素晴らしいライン、 '私はすべてがあったPHPのバックグラウンドから来ましたシンプルで、手続き的で、順番に、それを愛しています。 – anwerj