Показать сообщение отдельно
  #2 (permalink)  
Старый 05.09.2018, 09:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от SorryHanzoMain
Он работает прекрасно
На счет "прекрасно" я бы поспорил.
В вашем коде 4 раза из базы данных извлекаются одни и те же данные.
Можно получить результат единожды, дальше вместо сношения БД работать с полученной коллекцией данных (ниже пример кода).
Судя по всему, метод sql.get возвращает Promise, следовательно даже с таким обильным кол-вом запросов код можно было написать с значительно меньшим кол-вом уровней вложенности.

Сообщение от SorryHanzoMain
Сделать это сложно, по этому нужно, чтобы обработчик срабатывал если в сообщении есть...
Похоже на постановку задачи.


client.on("message", request => {
    const REQUIRED_PREFIX = '?';
    const message = request.content.toString().trim();

    if (message.substr(0, 1) !== REQUIRED_PREFIX)
        return;

    sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', [message]).then(results => {
        if (!results)
            return void sql.run('INSERT INTO вопросы (вопрос) VALUES (?)', [message]);

        let response = 'Нет',
            hasUndefined = false,
            hasTrue = false;

        //хз что-такое results, поэтому
        [].forEach.call(results, row => {
            if (row.trueorfalse === 'unfined')
                hasUndefined = true;
            else if (row.trueorfalse === 'true')
                hasTrue = true;
        });

        if (hasUndefined)
            response = 'Я этого ещё пока не знаю, но это не надолго';
        else if (hasTrue)
            response = 'Да';

        request.reply(response);
    });
});

Последний раз редактировалось Nexus, 05.09.2018 в 10:00.
Ответить с цитированием