es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo crear un método que devuelva Observable que emita el resultado de 2 Promesas que necesitan ser ejecutadas una después de la otra?

Hice una pregunta en premisas totalmente falsas. Parece ser que ninguna de mis soluciones tenía nada que ver con mi intención.

Creé un método que devuelve Observable y llama a dos métodos que devuelven Promise. Intenté de dos maneras diferentes:

 

public setItemInfos(itemInfos: IItemInfo[]): Observable<number> {
  return from(this.db.selectionItemInfos.clear().then(() => {
    return this.db.selectionItemInfos.bulkAdd(itemInfos);
  }));
}

public setItemInfos(itemInfos: IItemInfo[]): Observable<number> {
  const clear$ = from(this.db.selectionItemInfos.clear());
  const bulkAdd$ = from(this.db.selectionItemInfos.bulkAdd(itemInfos));

  return clear$.pipe(concatMap(() => bulkAdd$))
}

La forma de usarlo será:

myService.setItemInfos(itemInfos).subscribe(count => {
  console.log(`Cleared the table 1st and then added ${count} new items`);
});

Pensé que de ambas versiones:

  1. La limpieza de la tabla finalizaría cuando se iniciara la carga masiva.

  2. Cuando finalizara la carga masiva, se obtendría el recuento en la suscripción.

¿Cómo debería hacerse realmente esto? ¿O puede hacerse?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando crear un observable que emita la cantidad de artículos añadidos a la tabla después de completar las operaciones clear y bulkAdd.

    La primera versión de tu código debería funcionar como se espera, ya que el operador from creará un observable que emitirá el resultado de la promesa devuelta por bulkAdd.

    La segunda versión también debería funcionar, ya que el operador concatMap esperará a que el observable creado por clear$ se complete antes de suscribirse al observable creado por bulkAdd$. Luego, el resultado del observable bulkAdd$ será emitido por el observable creado por concatMap.

    El código que has proporcionado debería funcionar como se espera, y deberías poder obtener la cantidad de artículos añadidos a la tabla en la devolución de llamada subscribe.

Comments are closed.