Expo SQLite обещание отказа - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь выполнить простые операции SQLite (например, выбор и вставка), но это не работает вообще.

Вот моя функция:

executarComando(strSql) {

    return new Promise((resolve, reject) => {
        db.transaction((tx) => {
            tx.executeSql(strSql, [], (tx, result) => {
                resolve(result);
            }, (err) => {
                reject(err);
            })
        },
        null,
        null)
    });
}

Где я это называю:

    const strSelect = `
    SELECT true AS existe FROM tb0101_Usuarios WHERE
    nomeUSUARIO='${nomeUsuario}',
    cnpjUSUARIO='${cnpjUsuario}'
    `;
    const res = await executarComando(strSelect);

И предупреждение / ошибка, которую он выбрасывает в моем журнале консоли:

Possible Unhandled Promise Rejection (id: 0):
WebSQLTransaction {
  "_complete": true,
  "_error": null,
  "_running": false,
  "_runningTimeout": false,
  "_sqlQueue": Queue {
    "first": undefined,
    "last": undefined,
    "length": 0,
  },
  "_websqlDatabase": WebSQLDatabase {
    "_currentTask": null,
    "_db": SQLiteDatabase {
      "_closed": false,
      "_name": "TitaniumApp.db",
    },
    "_running": false,
    "_txnQueue": Queue {
      "first": undefined,
      "last": undefined,
      "length": 0,
    },
    "version": "1.0",
  },
}

1 Ответ

0 голосов
/ 07 ноября 2018

Сделайте что-то вроде следующего.

executarComando(strSql, params = []) {
   return new Promise((resolve, reject) => {
       db.transaction((tx) => {
           tx.executeSql(strSql, params,
               (_, result) => resolve(result),
               (_, err) => reject(err));
       });
   });
}

Это даст вам фактическую ошибку, а не объект транзакции.

Кстати, стоит упомянуть, что вы всегда должны защищать свои запросы от SQL-инъекций. Вы можете сделать это, просто заменив непосредственно объединенные значения на ? и передав их методу executeSql:

const strSelect = `
    SELECT true AS existe FROM tb0101_Usuarios WHERE
    nomeUSUARIO=? AND
    cnpjUSUARIO=?
`;
const res = await executarComando(strSelect, [nomeUsuario, cnpjUsuario]);
...