JavaScript - Como guardar el resultado de un Callbak en una variable Global

 
Vista:
Imágen de perfil de Yoel
Val: 18
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Como guardar el resultado de un Callbak en una variable Global

Publicado por Yoel (6 intervenciones) el 08/11/2019 19:09:14
Tengo la siguiente situación, estoy haciendo una consulta a una base de datos WebSql con phonegap (cordova) . El proceso de la consulta se me ejecuta sin problema cuando imprimo el resultado en la consola, puedo ver todos los datos. El detalle lo tengo cuando trato de guardar los datos en una variable global (dataSet) que tengo declarada, la cual me devuelve vació en esta variable necesito que se almacene todo el contenido de la función querySuccess() a continuación les dejo el código para ver si me pueden ayudar.

Gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
document.addEventListener("deviceready", onDeviceReady, false);
dataSet = [];
 
// Populate the database 
//
function populateDB(tx) {
 
}
 
// Query the database
//
function queryDB(tx) {
    tx.executeSql('SELECT * FROM `inventario`', [], querySuccess, errorCB);
}
 
// Query the success callback
//
function querySuccess(tx, results) {
 
    var len = results.rows.length,
        i;
    var dataSet = Array.from(Array(len), () => new Array(18));
    for (i = 0; i < len; i++) {
        regdatos = results.rows.item(i).codigo + "#" + results.rows.item(i).nombre + "#" + results.rows.item(i).inventario + "#" + results.rows.item(i).imagen + "#" + results.rows.item(i).volumenoz + "#" + results.rows.item(i).volumenml + "#" + results.rows.item(i).proveedor + "#" + results.rows.item(i).linea + "#" + results.rows.item(i).tipo + "#" + results.rows.item(i).cajaalmacen + "#" + results.rows.item(i).preciodecompra + "#" + results.rows.item(i).preciodeventamxn + "#" + results.rows.item(i).colores + "#" + results.rows.item(i).codigodebarras + "#" + results.rows.item(i).unidadescompradas + "#" + results.rows.item(i).ordendecompra + "#" + results.rows.item(i).unidadesvendidas + "#" + results.rows.item(i).ordendeventa;
        dataSet[i][i] = regdatos.split("#");
    }
console.log(dataSet);
    return dataSet;
}
 
// Transaction error callback
//
function errorCB(err) {
    console.log("Error processing SQL: " + err.code);
}
 
// Transaction success callback
//
function successCB() {
    var db = window.openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
    db.transaction(queryDB, errorCB);
}
 
function onDeviceReady() {
    var db = window.openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
    db.transaction(populateDB, errorCB, successCB);
}
onDeviceReady();
console.log(dataSet);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.448
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Como guardar el resultado de un Callbak en una variable Global

Publicado por Alejandro (532 intervenciones) el 09/11/2019 17:11:58
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Linea 2: Inicializas la variable global dataSet, no se utiliza en ningún lugar.
Linea 22: Declaras e inicializas una variable local dataSet, pues tiene "var"
La variable local tiene preferencia sobre la variable global.
¿Quieres usar la variable global? quita la palabra "var"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 18
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Como guardar el resultado de un Callbak en una variable Global

Publicado por Yoel (6 intervenciones) el 11/11/2019 16:24:23
Hola buenos días y gracias por su respuesta hice lo que me comenta u aun así cuando imprimo el resultado fuera de la función querySuccess me sigue dando vacío.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.448
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Como guardar el resultado de un Callbak en una variable Global

Publicado por Alejandro (532 intervenciones) el 23/11/2019 19:21:30
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
¿El "var" que quitaste fue el de la linea 22?
ahora la variable global se sobrescribe con
1
dataSet = Array.from(Array(len), () => new Array(18));
esa parte no se bien que quieres hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 18
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Como guardar el resultado de un Callbak en una variable Global

Publicado por Yoel (6 intervenciones) el 24/11/2019 16:45:49
El procedimiento que hice, fue quitar el var de la linea 22 y colocarlo en la linea 2 pero aun así me sigue dejando dejando null la variable dataSet
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.448
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Como guardar el resultado de un Callbak en una variable Global

Publicado por Alejandro (532 intervenciones) el 25/11/2019 04:18:37
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
ya entendí el Array.from, es el contenedor vació para luego depositar los datos.
Me parece mejor esto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
registro=results.rows.item(i);
regdatos=[]
regdatos.push(registro.codigo);
regdatos.push(registro.nombre);
regdatos.push(registro.inventario);
regdatos.push(registro.imagen);
regdatos.push(registro.volumenoz);
regdatos.push(registro.volumenml);
regdatos.push(registro.proveedor);
regdatos.push(registro.linea);
regdatos.push(registro.tipo);
regdatos.push(registro.cajaalmacen);
regdatos.push(registro.preciodecompra);
regdatos.push(registro.preciodeventamxn);
regdatos.push(registro.colores);
regdatos.push(registro.codigodebarras);
regdatos.push(registro.unidadescompradas);
regdatos.push(registro.ordendecompra);
regdatos.push(registro.unidadesvendidas);
regdatos.push(registro.ordendeventa);
 
dataSet.push(regdatos);

O mejor aun si es el orden natural de los campos
1
2
3
4
5
regdatos=[]
for(key in registro){
   regdatos.push(registro[key]);
}
dataSet.push(regdatos);


no veo porque daría null, revisa tu variable results, también elimina el return, no hace falta pues es la variable global.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar