У меня есть класс Angular 9, называемый "PdfGenerator", который содержит функцию, которая принимает HTML и создает необработанные данные PDF. Сгенерированный контент доступен только при обратном вызове функции «from HTML». Однако мне нужно вернуть это в форме «Наблюдаемый» в Angular, потому что функции «от HTML» требуется несколько секунд для обработки.
Функция «подписаться» существует в компоненте класс, который вызывает Observable. Я попытался упростить ситуацию, и код выложен ниже. Хотя я не был уверен, как создать из этого скрипку.
По сути, я надеюсь, что в результате "подписка" параметр "результат" будет тем, что возвращается в возвращении do c .output () "из функции обратного вызова" from HTML ".
Как мне настроить наблюдаемое для правильной работы (т. е. изменить функцию" createPdf ")?
/** service class **/
import { Observable, of as observableOf } from 'rxjs';
class PdfGenerator {
constructor() {}
createPdf(html): Observable<any> {
// jsPDF is a library that creates pdfs from html
// please note that I'm omitted a lot of detail here
var doc = new jsPDF(/* parameters */);
doc.fromHTML(html, function(e) {
// doc.output() is the generated PDF content, and needs
// to be returned back as the "result" in the subscribe
return doc.output();
});
}
}
/** component that uses the above service **/
import { Component } from '@angular/core';
import { PdfGenerator } from 'pdf-generator';
@Component({
selector: 'html-document',
templateUrl: './html-document.html'
})
export class HtmlDocument {
constructor(private pdf: PdfGenerator) {}
callCreatePdf() {
var html = '<body><h1>test</h1></body>';
this.pdf.createPdf(html).subscribe((result) => {
console.log("my pdf output is...", result);
});
}
}