javascript - react native react-native-sqlite-storage不返回结果

标签 javascript reactjs react-native sqlite

我使用来自react-native-sqlite-storage的SQLite数据库

我没有得到在警报中显示的结果
它显示未定义

我也尝试不使用等待和异步

MainFile

import DBHelper from './DBHelper.js';
export default class MainFile extends Component {

  componentDidMount() {
    this.dbTransaction();
  }

  dbTransaction = async () => {
    var value = await DBHelper.getWatchList()
    alert(value)
  }
  .....
}

DBHelper

import React, {Component} from 'react';
var SQLite = require('react-native-sqlite-storage');
var dbName = "test.db";
var tableName = "tableName";
const DBHelper = {
    getWatchList: () => {
        var db = SQLite.openDatabase({name : dbName, createFromLocation : 1}, openCB,errorCB);
        db.transaction( (tx) => {
            tx.executeSql("select * from " + tableName, 
                          [], (tx, results) => {
                console.log("\n\nQuery completed\n");
                var resultItemIdArr = new Array();
                for (let i = 0; i < results.rows.length; i++) {
                    resultItemIdArr.push(results.rows.item(i).itemId);
                    console.log(results.rows.item(i).itemId);
                }
                return resultItemIdArr;
            });
        });
    },
}

const errorCB = (err) => {
  console.log("SQL Error: " + err);
}

const successCB = () => {
  console.log("SQL executed fine");
}

const openCB = () => {
  console.log("Database OPENED");
}

export default DBHelper;

我想打印警报中的resultItemIdArr

最佳答案

您在此处使用回调 db.transaction((tx) => {,因此您将在回调内返回 resultItemIdArr。如果库不支持 Promise你应该这样做:

getWatchList: (callback) => {
    var db = SQLite.openDatabase({name : dbName, createFromLocation : 1}, openCB,errorCB);
    db.transaction( (tx) => {
        tx.executeSql("select * from " + tableName, 
                      [], (tx, results) => {
            console.log("\n\nQuery completed\n");
            var resultItemIdArr = new Array();
            for (let i = 0; i < results.rows.length; i++) {
                resultItemIdArr.push(results.rows.item(i).itemId);
                console.log(results.rows.item(i).itemId);
            }
            callback(resultItemIdArr);
        });
    });
},

并像这样调用getWatchList:

dbTransaction = () => {
    DBHelper.getWatchList(value=>{
      alert(value)
    })

}

关于javascript - react native react-native-sqlite-storage不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51475821/

相关文章:

javascript - JavaScript 运行时如何工作?

javascript - 在 Angular 中,如何将指令的 Controller 共享给其子内容(当 transinclude 为 true 时)?

javascript - 如何在 JavaScript 中的 new Number() 中保留前导零

javascript - 从应用商店或 Play 商店更新时应用程序崩溃,因为它具有旧的本地存储

ios - React-Native 和 xcode 10 - 将 Base SDK 设置为 12.1 但编译为 11

javascript - 需要使用CSS从 child 到 parent 的路径

javascript - Assets 在 GatsbyJS 项目(Netlify 托管)中加载速度非常慢

javascript - 如何在 React onClick 中模拟键盘事件?

react-native - 在 React-Native 中动态设置 RTL/LTR

android - 如何获取在启动时立即崩溃的 React Native Android 应用程序的崩溃日志