gpt4 book ai didi

javascript - 如何在 NodeJS 中控制应用程序的流程

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:33 25 4
gpt4 key购买 nike

我正在用 nodeJS 编写我的第一个应用程序。我正在写一个电报机器人,我想知道如何控制异步性质的应用程序的流程。我来自 php 背景,在那里一切都很简单,程序化,一个接一个。

比方说,在我的机器人中,当收到任何消息时,首先程序必须确保用户详细信息在缓存或数据库中,然后再继续。检查完成后就可以继续了。

我打算通过使用一个变量作为标志来做到这一点,但由于 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();
}

最佳答案

您可以使用回调或 promise 您可以使用异步模块或互斥锁

如果您需要序列化一些异步函数,您可以使用以下方法之一:

Callback

Native promises

Bluebird promise

Async module

回调和 promise 主要用于相关功能,第二个功能需要第一个功能。bluebird 是一个用于创建 promise 并对其进行完全自定义的模块。

Async 模块是异步运行函数并将它们的结果放在一起的好方法。

最后一种方法是 Mutex,如果您在单个对象或文件中进行异步写入,则需要锁定释放方法

关于javascript - 如何在 NodeJS 中控制应用程序的流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com