Не могу сделать это (с циклом for) в node-sqlite3 - PullRequest
0 голосов
/ 15 января 2019

Мне нужно иметь такие же результаты с node-sqlite3, потому что я хочу использовать его в API остальных, и он должен быть асинхронным. Как я могу это сделать?

Когда я пробовал это в node-sqlite3 в цикле for, результаты всегда были случайными. Я не мог понять почему. Пожалуйста, помогите мне.

Я думаю, что это как-то связано с асинхронностью от узла-sqlite3. Но позже я понял, что мне нужно, чтобы он был асинхронным.

В лучшем-sqlite3

const Database = require('better-sqlite3');

const tsePath = './tseFiles/94-ENAR-000.tse';

const db = new Database(tsePath);

let rows = [];

const sqlGetLastId = db.prepare("SELECT COUNT(ROWID) AS countFilledIn FROM WRITE WHERE T2 not null");
const sqlGetLatestRead = db.prepare("SELECT * FROM READ WHERE ROWID = ?");
const sqlGetLanguage = db.prepare("SELECT Dir, Subtag FROM EXTDIR WHERE LangID=?");

const count = sqlGetLastId.get().countFilledIn;
for (let i = 1; i <= count; i++) {
   let option = {
      id: i,
      sourceLang: "",
      sourceDir: "",
      sourceText: "",
      translationLang: "",
      translationDir: "",
      translationText: ""
   };
   const result1 = sqlGetLatestRead.get(i);
   option.sourceText = result1.source_text;
   option.translationText = result1.translated_text1;
   const sourceLanguage = result1.source_language;
   const translationLanguage = result1.target_language;
   const result2 = sqlGetLanguage.get(sourceLanguage);
   option.sourceLang = result2.Subtag;
   option.sourceDir = result2.Dir;
   const result3 = sqlGetLanguage.get(translationLanguage);
   option.translationLang = result3.Subtag;
   option.translationDir = result3.Dir;
   rows.push(option);
}

console.log(rows);


The output is:

[ { id: 1,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText:
     'It says—and I’m paraphrasing here—that the key to reading more books is to stop being so precious about it, you idiot.',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'ن الرائع، هذا النوع من ' },
  { id: 2,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText: '11 softballs',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AA' },
  { id: 3,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText:
     'Especially if they want to be the "authority" on what\'s hot and what\'s not!',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AAA' },
  { id: 4,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText:
     'These wallets require more than one user to enter their key before funds can be transferred.',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AAAA' },
  { id: 5,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText:
     'The Linksys EA8300 Max-Stream router boasts top speeds and tons of features for medium-size homes, and it\'s affordable at $200 or £150 in the UK.',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AAAAA' },
  { id: 6,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText: 'Things to See and Do in Hong Kong',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AAAAAA' },
  { id: 7,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText:
     'Retail isn\'t dying but it is evolving and through that evolution you will see a lot of store closures, but you will see stronger brands emerge.',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AAAAAAA' },
  { id: 8,
    sourceLang: 'en',
    sourceDir: 'ltr',
    sourceText:
     'Anybody from Iran in the comment section ever hear of these rich kids actually getting in legal trouble or does their families\' wealth protect them? Genuinely just curious.',
    translationLang: 'ar',
    translationDir: 'rtl',
    translationText: 'AAAAAAAA' } ]
...