Cómo suscribir la matriz de Observable Forkjoin no funciona
Estoy tratando de hacer múltiples solicitudes HTTP en angular usando forkjoin. Pero cuando me suscribo a Observable, no da ninguna respuesta.
let data = this.email.map((email) =>
this.get_student_service.get_student_by_email_id(email)
);
forkJoin([data]).subscribe((res) => {
console.log(res);
});
console.log('Execute');
Aqui esta mi servicio
get_student_by_email_id(email) {
return this.fire_store
.collection('User', (ref) => ref.where('email', '==', email))
.valueChanges();
}
Respuestas
Ok, si no puede suscribirse sin la función de mapa que ayuda, creo que lo que está sucediendo es que su función get_student_xxx no devuelve un observable.
Si esa función devuelve un observable, podrá suscribirse a ella.
puede hacer esto para obtener ayuda adicional del transpilador:
get_student_by_email_id(email) : Observable<someobject> {
...
}
Entonces, eso le da un par de opciones ... ¿Quizás solo necesita cambiar el valor de retorno y no usar Observable y suscribirse?
O tal vez necesite devolver un objeto diferente que sea observable.
También hay formas de crear su propio observable, por ejemplo, rxjs tiene una función llamada "de" que puede usar para "envolver" un objeto en un observable:
// RxJS v6+
import { of } from 'rxjs';
//emits any number of provided values in sequence
const source = of(1, 2, 3, 4, 5);
//output: 1,2,3,4,5
const subscribe = source.subscribe(val => console.log(val));
Además, si su función devuelve una matriz de observables, ¿es posible que [datos] sean solo datos
A partir de ahora, no obtuve ninguna respuesta, así que reinicialicé la base de fuego vainilla en component.ts y probé que me funcione. Si alguien resuelve este problema usando fuego angular, hágamelo saber. aquí está mi solución
const firebaseapp = firebase.initializeApp(environment.firebase);
get_student_email() {
let store = firebaseapp.firestore();
this.get_project_service
.get_project_by_doc_id(this.batchID, this.projectID)
.subscribe(async (res) => {
this.response = res;
this.email = [
'[email protected]',
'[email protected]',
'[email protected]',
];
const information = await Promise.all(
this.email.map(async (i) => {
let a = await store
.collection('User')
.where('email', '==', i)
.get();
let collection;
a.forEach((element) => {
collection = element.data();
});
return collection;
})
);
// request end
console.log(information);
});
// subscriber End
}