Привет, Эшвин!
Отлично, я использую эту логику. Но мне нужно сделать один HTTP-вызов для всех отсутствующих ключей вместо нескольких вызовов. Я изменю вызов службы к API, чтобы он возвращал массив наблюдаемых (тип возврата: Observable<any>[]
). Я новичок в Rx, так что можете ли вы\кто-нибудь помочь мне, как объединить массив данных, возвращаемый из API, в основной список.
Ниже приведен код, который я пытаюсь использовать, но он не работает.
getMuliple<T>(keys: string[], fallback?: Observable<T>, maxAge: number = this.DEFAULT_MAX_AGE): Observable<T> | Subject<T> { const keysNotExist: string[] = []; const datas = keys.map(key=> { if (this.hasValidCachedValue(key)) { console.log(`%cGetting from cache ${key}`, 'color: green'); let ne = Observable.of(this.cache.get(key).value); return ne; } if (this.inFlightObservables.has(key)) { let ne = this.inFlightObservables.get(key); return ne; } if (fallback && fallback instanceof Observable) { let subject = new Subject(); this.inFlightObservables.set(key, subject); //If not exist in any of this need to make API call, so adding this tag to an array to make a consoliated call keysNotExist.push(key); return subject; } }); //Loop ends to get data for cache let merged: Observable<any>; if (keysNotExist.length > 0 && fallback && fallback instanceof Observable) { console.log(`%c Calling api for ${keys.join(',')}`, 'color: purple'); merged = fallback.do(value => { let da: any[] = []; for (let key in value) { this.set(key, value[key], maxAge); } }); //Observable.forkJoin(fallbackRet, datas); } //let returnData = Observable.concat(datas, merged); return null; //Don't know what to return here. } this.set(key, value[key], maxAge); } }); //Observable.forkJoin(fallbackRet, datas); } //let returnData = Observable.concat(datas, merged); return null; //Don't know what to return here. }