react native react-native-sqlite-storage 不返回结果 [英] react native react-native-sqlite-storage not return result

查看:65
本文介绍了react native react-native-sqlite-storage 不返回结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是 react-native-sqlite-storage 中的 SQLite 数据库

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

我也尝试不使用 await 和 async

<块引用>

主文件

从'./DBHelper.js'导入DBHelper;导出默认类 MainFile 扩展组件 {componentDidMount() {this.dbTransaction();}dbTransaction = async() =>{var value = await DBHelper.getWatchList()警报(值)}.....}

<块引用>

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, 结果) =>{console.log("\n\n查询完成\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);}返回 resultItemIdArr;});});},}const errorCB = (err) =>{console.log("SQL 错误:" + err);}const successCB = () =>{console.log("SQL 执行正常");}const openCB = () =>{console.log("数据库已打开");}导出默认的 DBHelper;

我想在警报中打印 resultItemIdArr

解决方案

您在此处使用回调 db.transaction((tx) => { 所以您正在返回 resultItemIdArr 在回调中.如果 lib 不支持 promises,你应该这样做:

getWatchList: (回调) =>{var db = SQLite.openDatabase({name : dbName, createFromLocation : 1}, openCB,errorCB);db.transaction( (tx) => {tx.executeSql("select * from " + tableName,[], (tx, 结果) =>{console.log("\n\n查询完成\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);}回调(resultItemIdArr);});});},

并像这样调用getWatchList:

dbTransaction = () =>{DBHelper.getWatchList(value=>{警报(值)})}

I'm use SQLite database from react-native-sqlite-storage

I'm not getting result for display in alert
it display undefined

I'm also try without await and async

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;

I want to Print resultItemIdArr value in alert

解决方案

You are using a callback here db.transaction((tx) => { so you are returning resultItemIdArr inside the callback. If the lib doesn't support promises you should do it like this:

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

and call the getWatchList like this:

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

}

这篇关于react native react-native-sqlite-storage 不返回结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆