Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Local Zotero: withZoteroDb closes the DB before an async callback finishes (missing await)

Abierto Apto para principiantes
#1,138 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
1/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
90/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
sqlite, typescript

Línea de trabajo

Comienza en packages/editor-server/src/core/zotero/local/db.ts en withZoteroDbExclusive() y revisa después los tres llamadores en source.ts alrededor de las líneas 36, 95 y 120. Añade una prueba de regresión usando un callback que haga await antes de consultar, y ejecuta las pruebas relevantes de editor-server; estará terminado cuando la base de datos siga siendo utilizable hasta que el callback asíncrono termine y después se cierre.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Bug (latent)

withZoteroDbExclusive() in packages/editor-server/src/core/zotero/local/db.ts:74 does:

try {
  db = new Database(...);
  ...
  return f(db);        // f: (db) => Promise<T>
} finally {
  if (db) db.close();  // runs as soon as f returns its promise
  ...
}

Because f(db) is returned without await, the finally runs as soon as f hands back its promise, not when that promise settles. If f ever awaits anything before it finishes using db, the database is closed out from under it, and the next db.all(...) throws.

Current status

It doesn't bite today. The node-sqlite3-wasm API is synchronous, and all three callers in source.ts (lines ~36, ~95, ~120) are async callbacks that never await, so their DB work finishes synchronously before the promise is returned. The trap is that anyone who adds an await inside one of those callbacks (a network call to the Zotero web API, a file read, etc.) breaks it, and the resulting "database closed" error will be confusing.

Fix

return await f(db);

That's the whole change. withZoteroDbExclusive is already async, so this just moves close() until after f settles. Consider adding a unit test with a callback that awaits (e.g. await Promise.resolve()) before querying.

Found during the dependency-upgrade research.

Lenguaje dominante
TypeScript
Estrellas
652
Forks
64
Merge medio
8 h 45 min
PR fusionados (30 d)
36

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de quarto-dev/quarto

Todos los issues de quarto-dev/quarto

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.