繁体   English   中英

未处理的 promise 拒绝:错误:数据库表错误:在本机反应中未定义

[英]Unhandled promise rejection: Error: Database Table error: undefined in react native

我正在尝试使用 expo 的 SQLite 存储我为我的 react 本机应用程序创建的数据,但是当我尝试这样做时出现错误。

我的代码:

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;
    }
  };


从上面我试图将数据存储在数据库中。

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;
};

从上面的代码中,每当我将数据从savePlaceHandler发送到insertData时,都会出现错误。

错误:

[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",
  },
}

我也无法弄清楚这个错误是什么意思为什么我会得到这个?

根据提供的文档为Transaction.executeSql交换回调实现的顺序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;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM