我是 React-Native 的新手,我对如何拥有一个可以由文件中的所有函数访问的变量而不是在一个类中感到困惑。
我的问题是我在 taskFour() 中分配了存储空间,并且我希望在 runDemo() 中返回该值,但是由于某种原因,当我在 runDemo() 中的 console.log(storage) 中返回未定义时!
我已经定义了一个帮助文件,其中包含一堆相互调用的函数。
助手.js
import React from 'react';
import SQLite from 'react-native-sqlite-storage';
let db;
let storage;
function runDemo() {
loadAndQueryDB();
//Suppose to return value assigned in queryPeopleSuccess but console logs 'undefined'
console.log(storage);
return storage;
}
// Sends an update saying that Database was successfully opened
function openCB() {
console.log("Success Opening DB");
}
// Sends an update with error message and returns FALSE
function errorCB(err) {
console.log("SQL Error: ", err);
return false;
}
/** 2. Called when runDemo is called **/
/* assigns variable 'db' to opened Database */
/* Calls queryPeople(db) */
function loadAndQueryDB() {
console.log("Opening Database...: ");
db = SQLite.openDatabase({ name: "users.db", createFromLocation: 1}, openCB, errorCB);
queryPeople(db);
}
/** 3. Called when loadAndQueryDB is called **/
/* Get the DB and applies a SQL call that if successful will call queryPeopleSuccess*/
function queryPeople(db) {
console.log("Executing employee query...");
//Execute a database transaction.
db.transaction((tx) => {
tx.executeSql('SELECT * FROM users', [], queryPeopleSuccess, errorCB);
});
}
function queryPeopleSuccess(tx, results) {
var len = results.rows.length;
let localArray = [];
//Go through each item in dataset
for (let i = 0; i < len; i++) {
let row = results.rows.item(i);
localArray.push(row);
}
storage = localArray;
}
export {
runDemo,
}
我认为通过在函数之外分配“存储”可以使其成为该文件中所有函数可访问的变量,而不使其成为全局变量。此外,我的一个限制是我不能从 queryPeopleSuccess 一路返回存储到 runDemo,因为这些函数中的函数不应该有返回值!
有人可以指出我如何在一个文件中拥有一个变量,而该变量不需要在一个可以由该文件中的函数访问和编辑的类中?
已编辑:为清晰和错别字而编辑。原来我的代码的问题是由于异步!