Home > other >  Unhandled promise rejection: Error: Database Table error: undefined in react native
Unhandled promise rejection: Error: Database Table error: undefined in react native

Time:01-28

I am trying to store data that I created for my react native app using expo's SQLite but I am getting errors when I try to do so.

My code:

const savePlaceHandler = async () => {
    try {
      const newPath = await fileMoveHandler();
      const dbResult = await insertData(
        titleValue,
        newPath,
        "Dummy address",
        15.2,
        16.2
      ); //Here I am trying to store data in SQLite
      console.log("dbResult: ", dbResult); //no logs
      dispatch(placesActions.addPlace(titleValue, newPath)); //it doesn't dispatch
      props.navigation.goBack();
    } catch (err) {
      console.log(err);
      throw err;
    }
  };


From above I am trying to store data in the Database.

export const insertData = (title, imageUri, address, lat, lng) => {
  const promiseDB = new Promise((resolve, reject) => {
    db.transaction((tx) => {
      tx.executeSql(
        `INSERT INTO places (title, imageUri ,address, lat, lng) VALUES (?,?,?,?,?)`,
        [title, imageUri, address, lat, lng],
        (error) => {
          reject(error);
          console.log(error);
          throw new Error("Database Table error: "   error.message); //Error
        },
        (result) => {
          resolve(result);
          console.log("result: ", result);
        }
      );
    });
  });
  return promiseDB;
};

From the above code, I am getting an error whenever I send data from savePlaceHandler to insertData.

Error:

[Unhandled promise rejection: Error: Database Table error: undefined]
* helper/db.js:34:22 in tx.executeSql$argument_2
- node_modules/@expo/websql/lib/websql/WebSQLTransaction.js:69:13 in self._websqlDatabase._db.exec$argument_2
- node_modules/expo-sqlite/build/SQLite.js:16:8 in SQLiteDatabase#exec
- node_modules/react-native/node_modules/promise/setimmediate/core.js:37:13 in tryCallOne
- node_modules/react-native/node_modules/promise/setimmediate/core.js:123:24 in setImmediate$argument_0
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:130:14 in _callTimer
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:181:14 in _callImmediatesPass
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:441:30 in callImmediates
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:387:6 in __callImmediates
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:135:6 in __guard$argument_0
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:364:10 in __guard
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:134:4 in flushedQueue
* [native code]:null in flushedQueue
* [native code]:null in invokeCallbackAndReturnFlushedQueue

Possible Unhandled Promise Rejection (id: 1):
WebSQLTransaction {
  "_complete": false,
  "_error": null,
  "_running": true,
  "_runningTimeout": false,
  "_sqlQueue": Queue {
    "first": undefined,
    "last": undefined,
    "length": 0,
  },
  "_websqlDatabase": WebSQLDatabase {
    "_currentTask": TransactionTask {
      "errorCallback": [Function anonymous],
      "readOnly": false,
      "successCallback": [Function anonymous],
      "txnCallback": [Function anonymous],
    },
    "_db": SQLiteDatabase {
      "_closed": false,
      "_name": "places.db",
    },
    "_running": true,
    "_txnQueue": Queue {
      "first": undefined,
      "last": undefined,
      "length": 0,
    },
    "exec": [Function anonymous],
    "version": "1.0",
  },
}

I am not able to figure out what does this error means also Why I am getting this?

CodePudding user response:

Swap the order of your callback implementation for Transaction.executeSql as per provided docs https://docs.expo.dev/versions/latest/sdk/sqlite/#sqltransaction

export const insertData = (title, imageUri, address, lat, lng) => {
  const promiseDB = new Promise((resolve, reject) => {
    db.transaction((tx) => {
      tx.executeSql(
        'INSERT INTO places (title, imageUri ,address, lat, lng) VALUES (?,?,?,?,?)',
        [title, imageUri, address, lat, lng],
        (tx, result) => {
          resolve(result);
        },
        (tx, error) => {
          reject(error);
        }
      );
    });
  });
  return promiseDB;
};
  •  Tags:  
  • Related