首页 > 解决方案 > 防止两个函数异步运行 - JavaScript

问题描述

我目前正在开发一个可以解决问题的聊天机器人。所以我已经编写了我的代码,但是有两个函数异步运行。所以我想要的是我的代码首先运行一个函数来检查用户输入中的值是否等于我的数组中的值。然后它会发送一条消息,询问问题所在的教室。然后我希望我的代码运行第二个函数,循环遍历用户输入以查找课堂提及,然后将包含该课堂的消息发送给问题解决者。

但是我的代码中的问题是,当我提到教室时,这两个函数同时发送一条消息,例如:

用户输入:“我的智能板有问题”

聊天机器人第一条消息:“对不起,我没听懂。请把教室写成:L***。”

聊天机器人的第二条消息:“好的……你目前的问题在哪个教室?”

这不是我想要的。我想要的看起来像这样:

用户输入:“我的智能板有问题”

聊天机器人消息:“好的……您当前的问题在哪个教室?”

用户输入:“L108”

但是如果教室不在教室数组中,那么聊天机器人会发出消息:“对不起,我没听懂。请把教室写成:L***。”

我试图做的是在第一个函数中调用第二个函数,但这不起作用,或者我做错了;)。我的代码如下所示:

bot.on('message', data => {
    if (data.type !== 'message' || data.subtype === 'bot_message') {
        return;
    }
    handleMessage(data.text);
    findClassroomMention(data.text);
    console.log(data)
});

var digibord =
    {
        name: ["digibord","smartboard","schoolbord"]
    };

function handleMessage(message) {
    digibord.name.forEach((name) => {
        if (name.includes(message)) {
            bericht();
            console.log(message);
        }
    });
}

function bericht() {
    const params = {
        icon_emoji: ':smiley:'
    }
    problem = "digibord"
    bot.postMessageToChannel('general', 'Okay...In what classroom is your current problem?',params);
};

var classrooms = 
    {
        L108: ["L108","108"],
        L208: ["L208","208"]
    };

function findClassroomMention(message) {    
    var found = false   
    for(var ClassroomId in classrooms) {
        for(var term of classrooms[ClassroomId]) {
            if(message.includes(term)) {
                found = ClassroomId;
                break;
            }
        }
        if (!found) {
            const params = {
                icon_emoji: ':smiley:'
            }
            bot.postMessageToChannel('general'," I'm sorry but I didn't understand it. Please write the classroom as the following: L***.", params);
            break;
        }
        if (found) {
            notifyProblemSolver(ClassroomId);
            break;
        }
    }
    return found
};

function notifyProblemSolver(ClassroomId) {
    const params = {
        icon_emoji: ':smiley:'
    }
    bot.postMessageToChannel('caris','We have a problem with '+ problem + ' in ' + ClassroomId, params);
};

关于如何解决这个问题的任何提示?提前致谢!

标签: javascriptfunctionasynchronousvisual-studio-code

解决方案


推荐阅读