Как бы я использовал Angular 9 «подписка» и «наблюдаемый», когда мне нужно вернуть значение из функции обратного вызова? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть класс 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);
        });
    }
}
...