У меня есть метод, который возвращает 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
на нем?