Soy nuevo en React Native, estoy tratando de extrapolar datos de una consulta, pero "return" no funciona. Tal vez porque requería las promesas, lo intenté pero no soy lo suficientemente bueno. Llamo a la función en el componente Ver de la función de la aplicación (en App.js) así
<View>Search()</View>pero no se muestra nada. Si pongo console.log en search() (en otra función) puedo ver el resultado, pero no puedo devolverlo en mi App.js (la función se importa correctamente a la aplicación)
export function Search() { db.transaction( (tx) => { tx.executeSql("select pver from profile where id=12524234", [], (tx, results) => { var a = JSON.stringify(results.rows._array[0].pver) var data = Number(a) return data; }); }, null, ) };Así es como lo he intentado hacer por consejo de un usuario.
//this in App.js import {Search} from './Funzioni' export default function App() { const [searchResult, setSearchResult] = useState(); useEffect(() => { console.log("we are in the useeffect") Search().then((data)=>{ console.log("set") //doesn't appear setSearchResult(data) }) },[]); //other codes return (<View>{searchResult}</View> ) } //this in "Funzioni.js" export async function Search() { return new Promise((resolve, reject) => { db.transaction( (tx) => { tx.executeSql("select pver from profile where id=12524234", [], (tx, results) => { var a = JSON.stringify(results.rows._array[0].pver) var data = Number(a) console.log("the data: " + data) //doesn't appear resolve(data); }); }, null, ) }); };El método de transacción es asíncrono cuando representa su componente, la función de búsqueda aún no se ha resuelto.
En su componente, debe usar useState para almacenar los datos y useEffect para obtener los datos
const [searchResult, setSearchResult] = useState(''); useEffect(() => { Search().then((data)=>{ setSearchResult(data) }).catch((error) => console.log(error)); },[]); return <View>{searchResult}</View>Su función de búsqueda debería ser así
export async function Search() { return new Promise((resolve, reject) => { const db = SQLite.openDatabase('THE_NAME_OF_YOUR_DATABASE.db') db.transaction( (tx) => { tx.executeSql("select pver from profile where id=12524234", [], (tx, results) => { var a = JSON.stringify(results.rows._array[0].pver) var data = Number(a) resolve(data); }, function (error) { reject(false); throw new Error( 'Error: ' + error ); }); }, function (error) { reject(undefined); throw new Error('error: ' + error.message); }, function () { console.log('ok'); } ) }); };