Значение ниже было оценено только сейчас - PullRequest
2 голосов
/ 01 марта 2020

У меня есть метод, который возвращает Observable следующим образом:

public myMethod(params): Observable<CertainType> {
    // some code goes here;
    return defer(() => this.customHttp.request<XML>(config, ctx)).pipe(
    map(
            (xmlRes: string) => {
                const xmlHandler = new strongsoap.soap.XMLHandler();
                const rawSFResponse = xmlHandler.xmlToJson(null, xml, null);
                const res = rawSFResponse["Body"]["SFResponse"]["SFResult"];
                // more code goes here;
            }
        )
    )
}

Проблема с этим фрагментом кода заключается в том, что в консоли появляется сообщение об ошибке Cannot read property 'SFResult' of undefined. И если я пытаюсь записать в консоль объект rawSFResponse, он распечатывается, но когда я нажимаю на него, он говорит: «Значение, указанное ниже, было оценено только сейчас».

Насколько я понимаю, это происходит, потому что это утверждение res = rawSFResponse["Body"]["SFResponse"]["SFResult"]; выполняется до полного формирования объекта res, а именно в момент его выполнения содержимое поля SFResult все еще не определено. Это правильно? Если так, то каков будет лучший способ дождаться его формирования? Может быть, мне нужно обернуть функцию разбора в обещание, а затем использовать await на нем?

...