обработка обещаний в pptxgen js и domToImage - PullRequest
0 голосов
/ 28 апреля 2020

если у меня есть 6 узлов, из которых два узла не существуют, поэтому для этих двух я получу ошибку. Поэтому ppt не будет загружен. Как обработать этот случай? Что я ищу здесь, так это то, что код выделение жирным шрифтом должно выполняться только после того, как последнее обещание было разрешено

 let pres = new pptxgen();    
 nodes.forEach((node, index) => {
  let slide = pres.addSlide();
  let nodeRef = document.getElementById(node);

  domtoimage.toPng(nodeRef).then((dataUrl) => {
    let base64Code = dataUrl.split(":").pop();

    slide.addImage({
      data: base64Code
    });

    **if (index == nodes.length - 1) {
      setTimeout(() => {
        pres.writeFile(pptName);
      }, 2000);
    }**
  });
});

ПРИМЕЧАНИЕ. - Возьмем пример наличия 6 узлов, где для последнего узла вы получаете nodeRef = null, поскольку его нет в HTML DOM.

В настоящее время у меня есть решение, которое ниже, но где-то я не удовлетворен этим подходом и ищу идеальный подход, при котором после выполнения последнего обещания я генерирую ppt: -

public exportToPpt(nodes: Array<string>, pptName: string) {
var count = 0;
let pres = new pptxgen();

nodes.forEach((node, index) => {

  let nodeRef = document.getElementById(node);

    domtoimage.toPng(nodeRef).then((dataUrl) => {
      count++;
      let slide = pres.addSlide();
      let base64Code = dataUrl.split(":").pop();

      slide.addImage({
        data: base64Code,

      });

      if (count == nodes.length) {
        pres.writeFile(pptName);
      }

    }).catch((error)=>{
      count++;
    });
});

}}

...