我在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和promise。 这里有一个小小的介绍: https://blog.readme.io/using-async-await-in-node-js-7-6-0/ – LongHike
令人敬畏的线条,'我来自一个PHP背景,一切都是简单的,程序化的,一个接一个的。“喜欢它。 – anwerj