Обратный вызов не является функцией в sqlite

я попытался сделать class DATABASE для создания db.run для многократного использования метода, чтобы вызвать обновление для создания и удалить в SQLite с помощью обратного вызова, вот мой код


const db = new sqlite3.Database("database.db", err => {
  if (err) {
    console.info(`can;t connected tp database, status: ${err}`);
  } else {
    console.info(`gotcha, succesfully connect to the database`);
  }
});

class DATABASE {
  static run(sql, params = [], callback) {
    db.run(sql, params, function(err) {
      if (err) {
        throw err;
        console.info(`something wrong with this ${sql}`);
        console.info(err);
        callback(err);
      } else {
        callback({"id" : this.lastID}) // this is could be null also
        console.info("sucesfully fo this ", sql);
      }
    });
  }
}

module.exports = DATABASE;

затем я вызываю этот класс примерно так:

const DATABASE = require("./setup.js");
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("database.db", err => {
  if (err) {
    console.info(`can;t connected tp database, status: ${err}`);
  } else {
    console.info(`gotcha, succesfully connect to the database`);
  }
});

db.serialize(() => {
  const departement = `CREATE TABLE IF NOT EXISTS departement(
                      id INTEGER PRIMARY KEY AUTOINCREMENT,
                      name TEXT NOT NULL,
                      city TEXT
                      )`;

  const employee = `CREATE TABLE IF NOT EXISTS employee(
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    firstName TEXT NOT NULL,
                    lastName TEXT,
                    gender TEXT NOT NULL CHECK (gender IN ('Male', 'Female')),
                    email TEXT NOT NULL UNIQUE ,
                    phone TEXT,
                    dept_id INTEGER,
                    FOREIGN KEY (dept_id) REFERENCES departement(id)
                    )`;
  DATABASE.run(departement);
  DATABASE.run(employee);

  // , err => {
  //   if (err) throw new Erro(`bugs here`);
  //   else console.info("sucess.....");
  // });
});

вы можете увидеть оператор else, callback({this.lastID}) когда я прокомментирую это и удалю оператор else, таблица будет создана успешно,

но если я снова напишу этот оператор else, сообщение об ошибке CALLBACK IS NOT FUNCTION но создать таблицу удалось

значение this.lastId равно способ, которым sqlite3 дает эту информацию, заключается в том, что он помещает поле в этот объект в контексте функции обратного вызова run(SQL, [params], function(err) { this.lastID }) ... но только для раз когда run вызывается с оператором INSERT. В противном случае это просто 0, как сказано в этом руководстве, https://stackabuse.com/a-sqlite-tutorial-with-node-js/

вы думали, что мой обратный вызов неверен ??

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
606
1

Ответы 1

Проблема в том, как вы написали callback({this.lastID}), измените его на callback(this.lastID) или callback({"lastID" : this.lastID}).

`const DATABASE = require("./setup");
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("database.db", err => {
  if (err) {
    console.info(`can;t connected tp database, status: ${err}`);
  } else {
    console.info(`gotcha, succesfully connect to the database`);
  }
});
var abc= function(arg){
  console.info(arg);  
};

db.serialize(() => {
  const departement = `CREATE TABLE IF NOT EXISTS departement(
                      id INTEGER PRIMARY KEY AUTOINCREMENT,
                      name TEXT NOT NULL,
                      city TEXT
                      )`;

  const employee = `CREATE TABLE IF NOT EXISTS employee(
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    firstName TEXT NOT NULL,
                    lastName TEXT,
                    gender TEXT NOT NULL CHECK (gender IN ('Male', 'Female')),
                    email TEXT NOT NULL UNIQUE ,
                    phone TEXT,
                    dept_id INTEGER,
                    FOREIGN KEY (dept_id) REFERENCES departement(id)
                    )`;
  DATABASE.run(departement, abc);
  DATABASE.run(employee, abc);

  // , err => {
  //   if (err) throw new Erro(`bugs here`);
  //   else console.info("sucess.....");
  // });
});`

А ты setup.js

const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("database.db", err => {
  if (err) {
    console.info(`can;t connected tp database, status: ${err}`);
  } else {
    console.info(`gotcha, succesfully connect to the database`);
  }
});

class DATABASE {
  static run(sql, callback) {
    db.run(sql, function(err) {
      if (err) {
        throw err;
        console.info(`something wrong with this ${sql}`);
        console.info(err);
        callback(err);
      } else {
        callback(this.lastID) // this is could be null also
        console.info("sucesfully fo this ", sql);
      }
    });
  }
}

module.exports = DATABASE;

опечатка в вопросе, мой обратный вызов тоже был таким: callback({"lastID" : this.lastID}) но не сработал :(

Zum Dummi 17.03.2019 12:53

Другие вопросы по теме