F. js / pasatiempoConsultaNoEliminados.js

1
import { ALMACEN_PASATIEMPO, Bd, INDICE_NOMBRE } from "./Bd.js"
2
import { bdConsulta } from "./lib/bdConsulta.js"
3
import { validaPasatiempo } from "./validaPasatiempo.js"
4
5
export async function pasatiempoConsultaNoEliminados() {
6
7
 return bdConsulta(Bd, [ALMACEN_PASATIEMPO],
8
  /**
9
   * @param {(resultado: import("./PASATIEMPO.js").PASATIEMPO[])=>void
10
   *                                                                  } resolve
11
   */
12
  (transaccion, resolve) => {
13
14
   const resultado = []
15
16
   const almacenPasatiempo = transaccion.objectStore(ALMACEN_PASATIEMPO)
17
18
   // Usa el índice INDICE_NOMBRE para recuperar los datos ordenados.
19
   const indiceNombre = almacenPasatiempo.index(INDICE_NOMBRE)
20
21
   // Pide un cursor para recorrer cada objeto que devuelve la consulta.
22
   const consulta = indiceNombre.openCursor()
23
24
   /* onsuccess se invoca por cada uno de los objetos de la consulta y una vez
25
    * cuando se acaban dichos objetos. */
26
   consulta.onsuccess = () => {
27
    /* El cursor correspondiente al objeto se recupera usando
28
     *  consulta.result */
29
    const cursor = consulta.result
30
    if (cursor === null) {
31
     /* Si el cursor vale null, ya no hay más objetos que procesar; por lo
32
      * mismo, se devuelve el resultado con los pasatiempos recuperados, usando
33
      *  resolve(resultado). */
34
     resolve(resultado)
35
    } else {
36
     /* Si el cursor no vale null y hay más objetos, el siguiente se obtiene con
37
      *  cursor.value */
38
     const modelo = validaPasatiempo(cursor.value)
39
     if (modelo.PAS_ELIMINADO === 0) {
40
      resultado.push(modelo)
41
     }
42
     /* Busca el siguiente objeto de la consulta, que se recupera la siguiente
43
      * vez que se invoque la función onsuccess. */
44
     cursor.continue()
45
    }
46
   }
47
48
  })
49
50
}
skip_previous skip_next