Я пытаюсь использовать Angular 7+, RxJS 6+ и InMemoryAPI для создания фиктивного API для тестирования моего интерфейсного интерфейса. Вот мой "in-memory-data-.service.ts":
export class InMemoryDataService implements InMemoryDbService {
// HTTP POST interceptor
post(reqInfo: RequestInfo) {
console.log('Caught POST:');
console.log(reqInfo);
if (reqInfo.collectionName === 'myApiUrlSign') {
console.log('Return generated myObject');
const reportResponse = new MyObject();
reportResponse.id = reqInfo.utils.getJsonBody(reqInfo.req);
reportResponse.time = new Date();
const response: ResponseOptions = {
body: reportResponse,
status: STATUS.OK
};
const observable = of(response);
console.log('In Memeory data service = ');
console.log(observable);
return observable;
}
return undefined; // Let the default POST handle all others
}
// Example DB Collection
createDb() {
const heroes = [
{ id: 11, name: 'Mr. Nice' },
{ id: 12, name: 'Narco' }
];
return {heroes};
}
}
Тогда мой сервис - простой почтовый звонок:
generateMyObject(myId: string): Observable<MyObject> {
return this.http.post<MyObject>(
this.apiUrl,
JSON.stringify({ myId }),
{ headers: this.headers }
);
}
Наконец, моя функция onSubmit компонента выглядит следующим образом:
onSubmit() {
const self = this;
const formModel = this.myForm.value;
const obs = this.myService.generateMyObject(formModel.myId);
console.log('On Submit Observer = ');
console.log(obs);
obs.subscribe((data: MyObject) => { // On Next()
console.log('MyObject recieved');
console.log(data);
self.myObject = data;
},
error => console.log(error), // On Error()
() => console.log('Completed')); // On Completed()
console.log(this.myObject);
}
Все работает, кроме моего наблюдателя, следующая функция никогда не вызывается и функция "Завершено" есть. Журнал консоли внутри «InMemoryDataService» возвращает правильную наблюдаемую величину с ожидаемым значением «MyObject». Хотя в моем Angular-компоненте console.log возвращается другая наблюдаемая. Он имеет правильное значение MyObject, но выглядит «вложенным» в 3 родительских объекта Observable.source. Поэтому, если я использую следующее присваивание, функция next () будет вызвана правильно:
const obs = this.reportGenService.generateReport(formModel.orderId)
.source.source.source;
Это очень странно, и когда я нахожу указатель мыши на «.source» в моей IDE, подсказка говорит, что он устарел. Как мне заставить это работать без использования нескольких вызовов ".source"? Я уверен, что что-то упустил, я просто не знаю что. Ваша помощь очень ценится.