Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
Javascript await sequence problem in expo-sqlite

I am using react native expo to do the init data load and insert it into DB. But seems the sequence is not my expectations.

and below is my init function

import { getData } from './GetData'
const db = SQLite.openDatabase('db.db') // returns Database object

const initDB = async (res: any) => {
    await db.transaction(async tx => {
        await tx.executeSql(`create table if not exists table (
            id integer primary key AUTOINCREMENT not null,
            ...... // create db query
        )`, [], 
        () => {
            console.log("created table")
        })
        
        await tx.executeSql(insertQuery
            , res.list,
            () => {
                console.log(`inserted data success`)
            },
            (_, err): boolean | any => {
                console.log(`err: ${err}`)
            }
        )
    })
}

export const initLoading = async () => {
    const res = await getData() // get data from API
    await initDB(res)
}
await new Promise(async resolve => {
    await initLoading()
    console.log("init done")
})

my expected console log should be

created table
inserted data success
init done

but the result is

init done
created table
inserted data success

what thing I am doing wrong to make the sequence incorrect?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

The problem is that in db.transaction you pass a function as argument. You dont await the function you passed, but you await just the execution of db.transaction. I think the best way to fix this is to wrap db.transaction in a Promise and resolve it when you need it to.

const initDB = async (res: any) => {
    return new Promise(async resolve => 
        await db.transaction(async tx => {
            await tx.executeSql(`create table if not exists table (
                id integer primary key AUTOINCREMENT not null,
                ...... // create db query
            )`, [], 
            () => {
                console.log("created table")
            })
            
            await tx.executeSql(insertQuery
                , res.list,
                () => {
                    console.log(`inserted data success`)
                    // Resovle when the data is successful
                    resolve()
                },
                (_, err): boolean | any => {
                    console.log(`err: ${err}`)
                }
            )
        })
    )
}

I would recommend you to also resolve on error. Else your code get's stuck.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda