Como inscrever-se array de Observable Forkjoin não funciona
Estou tentando fazer várias solicitações HTTP no angular usando forkjoin. Mas quando eu assino o Observable, ele não dá nenhuma resposta.
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 está meu serviço
get_student_by_email_id(email) {
return this.fire_store
.collection('User', (ref) => ref.where('email', '==', email))
.valueChanges();
}
Respostas
Ok, se você não consegue se inscrever sem a função de mapa que ajuda, acho que o que está acontecendo é que sua função get_student_xxx não está retornando um observável.
Se essa função retornar um observável, você poderá assiná-la.
você poderia fazer isso para obter ajuda extra do transpiler:
get_student_by_email_id(email) : Observable<someobject> {
...
}
Isso lhe dá algumas opções ... Talvez você precise apenas alterar o valor de retorno e não usar Observável e se inscrever?
Ou talvez você precise retornar um objeto diferente que seja observável.
Também existem maneiras de criar seu próprio observável, por exemplo, rxjs tem uma função chamada "de" que você pode usar para "envolver" um objeto em um observável:
// 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));
Além disso, se sua função retornar uma matriz de observáveis, é possível que [dados] sejam apenas dados
No momento, não recebi nenhuma resposta. Agora reiniciei o vanilla firebase em component.ts e tentei funcionar para mim. Se alguém resolver este problema usando fogo angular, por favor me avise. aqui está minha solução
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
}