Inside this inner function we perform our asynchronous processing and then when we are ready we call resolve(), like so:
var promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("Async Work Complete");
resolve();
}, 1000);
});
For concrete code: here firebase authentication github project,
getCurrentUser(){
return new Promise<any>((resolve, reject) => {
var user = firebase.auth().onAuthStateChanged(function(user){
if (user) {
resolve(user);
} else {
reject('No user logged in');
}
})
})
}
and here stated
For rxjs 6.0.0 use:
import { from } from 'rxjs';
var observableFromPromise = from(promiseSrc);
I could imagine solution would be
getCurrentUser() {
return from(firebase.auth().onAuthStateChanged(function (user) {
user.getIdToken().then(x => {
return x;
})
})
)
}
or
getCurrentUser() {
firebase.auth().onAuthStateChanged(function (user) {
return from(user.getIdToken());
})
}
My question is what is the equivalent second code snippet to from
expression in callback?
I don't know if I totally understand your question but if you are trying to return an observable stream from the user token, maybe the following could work:
getCurrentUser(): Observable<any> {
return new Observable(observer => {
firebase.auth().onAuthStateChanged(user => {
user.getIdToken().then(token => {
observer.next(token);
}).catch(error => {
observer.error(error);
})
})
})
}
Any time the auth state will change, a new user token will be sent on the stream. Hope this helps.