Узел ждет, когда sqlite вернет результаты - PullRequest
0 голосов
/ 08 марта 2019

Я довольно новичок в Node из Python, поэтому я привык к тому, что мой код выполняется в том порядке, в котором я его пишу, и это немного озадачило меня.

Я в основном получаю строкивернуться из моей базы данных SQLite и выполнить операцию над каждой строкой, а затем сохранить промежуточный итог.Затем я хочу, чтобы итоговая сумма ответила пользователю (это бот Discord)

Я пытался обернуть мой код в Promise, но не при запуске мой бот вылетает, говоря: «запрос не определен»'

async function feelingCommand(username,receivedMessage){
let sqlStatement = `SELECT Message FROM discord WHERE User = ? ORDER BY Time DESC LIMIT 2`;
let total = 0;
const query = await new Promise((resolve,reject) => {
    db.run(sqlStatement, (err) => {
    if(err) {
        return console.log(err.message);
        reject(err); 
    }
    db.each(sqlStatement, [username], (err, row) => {
        if (err) {
          reject(err);
        }
        let score = sentiment.analyze(`${row.Message}`).comparative;
        total = total + score;

      });
      resolve(query);
});
});
console.log(total)

}

Я был бы очень признателен за любую помощь, указав мне в правильном направлении.Если честно, я удивлен, что дошел до этого:)

1 Ответ

0 голосов
/ 11 марта 2019

Что ж, мой поиск в добавлении показал, что db.each - трудная задача для обещания, поэтому я переключился на использование db.all и цикла foreach с обещанием

async function feelingCommand(username,receivedMessage){
let sqlStatement = `SELECT Message FROM discord WHERE User = ? ORDER BY Time DESC LIMIT 2`;
let total = 0;
const query = await new Promise((resolve,reject) => {
    db.all(sqlStatement, [username], (err, rows) => {
        if (err) {
          reject(err);
        }
        rows.forEach((row) => {
            console.log(row.name);
            let score = sentiment.analyze(`${row.Message}`).comparative;
            total = total + score;
      });
      resolve(total);
    });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...