При вызове с Sharepoint API огромный список, который превышает 100 строк или те, которые вы положили в $ top = 100.Вы получаете поля списка и переменную __next.Эта переменная __next содержит строку с адресом следующей страницы, который необходимо запросить для последующих элементов списка.
Моя проблема заключается в неспособности выполнить запрос http.get синхронно, поэтому нет способа узнать,следующее закончилось или нет.
Я пробовал рекурсивные методы, создаю свой собственный пользовательский оператор RxJS и создаю Observable, который вызывает subscriber.next bu. Я всегда сталкиваюсь с последующими запросами.
getExpedienteFromUrl(httpUrl?: string): Observable<ExpedienteListAndNextQuery> {
const urlAddress = (httpUrl ? httpUrl : this.urlSharepointAPIExpedientes );
return this.http.get<D>(urlAddress, {
headers: {
accept: 'application/json;odata=verbose'
}
}).pipe(
map(x => this.mapExpedientesOfObserver(x) ),
this.getExpedientesPipe()
);
}
getExpedientesPipe(): Observable <IExpediente[]> {
return ($source: Observable<ExpedienteListAndNextQuery>) => {
return new Observable<IExpediente[]>(subscriber => {
$source.subscribe(
data => {
const expedientes: IExpediente[] = data.Expedientes;
const next: string = data.Next;
subscriber.next(expedientes);
if (next) {
// call to this.getExpedienteFromUrl(next) [Async]
// so if this where in a do while the following next will always
// be undefined
}
},
err => subscriber.error(err),
() => subscriber.complete()
);
});
};
}