Somos nuevos en angular y tenemos pocos métodos que deben invocarse en secuencia y devolver un valor. Aquí se invoca la devolución antes de completar la ejecución. He intentado diferentes cosas como async await, promise, setTimeout pero no tuve suerte. ¿Hay alguna solución para trabajar esto en orden de sincronización en angular?
transform(input:any) { this.getCachedUsers(); // this will set the this.CachedUsers array using a http get call(subscribe) this.getUserFromCachedUsers(input); // this will set the this.userName based on input userId from this.CachedUsers return this.userName; // here its returning empty }Debería intentar usar operadores planos observables.
Para transformar elementos emitidos por un Observable en otro Observable después de completar el Observable anterior, probablemente desee utilizar el operador concatMap. Crea un Observable interior y aplana su resultado con la corriente exterior.
const source = this.getCachedUsers() .pipe( concatMap(result => this.getUserFromCachedUsers(result.userId)) ) .subscribe(result2 => { // do some stuff });Aquí hay algunos operadores planos que puede usar que se comportan de manera diferente:
flatMap/mergeMap: crea un Observable inmediatamente para cualquier elemento de origen, todos los Observables anteriores se mantienen vivos
concatMap: espera a que el Observable anterior se complete antes
creando el siguiente
switchMap: para cualquier elemento de origen, completa el Observable anterior
e inmediatamente crea el siguiente
exhaustMap - mapear al observable interno, ignorar otros valores hasta que se complete ese observable