首页 文章

反应原生react-native-sqlite-storage不返回结果

提问于
浏览
1

我从react-native-sqlite-storage使用SQLite数据库

我没有得到警告显示的结果
它显示 undefined

我也试着没有等待和异步

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

1 回答

  • 1

    你在这里使用回调 db.transaction((tx) => { 所以你在回调中返回 resultItemIdArr . 如果lib不支持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)
        })
    
    }
    

相关问题