Вернуть внутреннюю наблюдаемую, изнутри наблюдаемую

В угловом проекте у меня есть служба, которая должна асинхронно загрузить библиотеку. Чтобы убедиться, что методы, использующие эту библиотеку, не вызывают ее до ее загрузки, я создал объект isLoaded ReplaySubject, который не генерирует до тех пор, пока библиотека не загрузится. Для первоначального тестирования установки метод выглядит примерно так:

  myMethod = (a: string): Observable<IPromise<Building[]>> => { //IPromise<any[]> |
return this.isLoaded.asObservable().map(() => {

    //do stuff to setup query parameters etc.

    //QT.execute returns a Promise, or rather, an object which can be cast to a promise
    return QT.execute(buildingsQuery).then(result => result);
});

};

Затем, чтобы использовать результаты, я должен сделать

myMethod.subscribe(res => {res.then(...)});

Некрасиво.

Мой следующий шаг - вернуть только наблюдаемое, поэтому я обертываю обещание в Observable.fromPromise(), но тогда я не уверен, как просто подписаться на эту новую внутреннюю наблюдаемую. Я пробовал это:

myMethod = (a: string): Observable<Building[]> => {
    let bldgObs: Observable<Building[]>;
    return this.isLoaded.asObservable().map(() => {

        //do stuff to setup query parameters etc.

        bldgObs = Observable.fromPromise(QT.execute(buildingsQuery).then(result => {
            return result;
        }) as any); //have to cast as any b/c return value's .then method is not always compatible with regular promises. This has worked fine elsewhere.
    })
        .combineLatest(bldgObs, (data1, data2) => {
            return data2;
        });
};

но я никогда не получаю значение. Насколько я понимаю, функция lateLatest будет использовать вызов observable (в данном случае this.isLoaded.asObservable()) в качестве первого элемента в списке наблюдаемых для наблюдения.

0 ответов

Другие вопросы по тегам