Angular 2 Firebase Observable to promise doesn't return anything
The problem is that the toPromise
operator converts the observable to a promise that resolves to the observable's final value. That means the observable must complete before the promise resolves.
In AngularFire2, list and object observables don't complete; they re-emit whenever the database changes.
You can solve the problem using the first
operator, which takes the first emitted value and then completes the composed observable:
import 'rxjs/add/operator/first';import 'rxjs/add/operator/map';import 'rxjs/add/operator/toPromise';...return this._af.database .list('users') .map(users => { let exists = false; users.forEach(user => { if (user.name.toLowerCase() === name.toLowerCase()) { console.log('Name already exists!'); exists = true; } }); return exists; }) .first() .toPromise();
I solved this by unsubscribing it after the first data received lazy way :)
const userSubs$ = this.db.object(`branch/${branchId}/products`).subscribe( async (payload: any) => { userSubs$.unsubscribe(); })
Or convert your code to something like this good way :)
const eventref = this.db.database.ref(`branch/${branchId}/products`); const snapshot = await eventref.once('value'); const productArray = snapshot.toJSON() return productArray;
Happy Coding