У меня есть метод getData
, который возвращает Observable<SupportingDocument>
.
( код и возвращаемое значение нельзя изменить, поскольку это внешний API ).
getData(): Observable<SupportingDocument> {
return of(new SupportingDocument());
}
Когда пользователь нажимает кнопку, мы фактически показываем ему модальную страницу.Когда этот модальный режим закрыт (Promise api) - мы должны вызвать getData()
и вернуть значение:
public dialogShow(): Promise<Observable<SupportingDocument>> {
return Promise.resolve(1).then(() => { //modal was closed
return this.getData();
})
}
В конце я должен предоставить метод show()
, который должен вернуть значение (и ошибки), который возвращается из return this.getData();
( возвращаемое значение показывает () не обязательно должно быть наблюдаемым, это может быть также обещание ).
Итак, я сделал это:
public show(): Observable<SupportingDocument> {
return new Observable<SupportingDocument>((obs) => {
this.dialogShow().then((res: Observable<SupportingDocument>) => obs.next(res), (res) => obs.error(res));
})
}
Полный код:
//user starts here
public show(): Observable<SupportingDocument> {
return new Observable<SupportingDocument>((obs) => {
this.dialogShow().then((res: Observable<SupportingDocument>) => obs.next(res), (res) => obs.error(res));
})
}
public dialogShow(): Promise<Observable<SupportingDocument>> {
return Promise.resolve(1).then(() => {
return this.getData();
})
}
getData(): Observable<SupportingDocument> {
return of(new SupportingDocument());
}
Вопрос
Мне кажется, я слишком усложнил такой простойзадача.Больше - мне действительно не нравится конструктивный подход new Observable
.
Может ли эта проблема быть решена без использования наблюдаемого конструктора (включая обработку ошибок)?
Полный демонстрационный код