等到使用$ .when完成功能

时间:2017-02-15 09:24:30

标签: javascript jquery

我正在尝试将我的网页转换为PDF。

我有两个页面被转换为base64编码图像,然后使用jsPDF添加到PDF中。它工作正常。

我的问题是我希望下面的代码在保存之前等待处理domtoimage函数。

var doc = new jsPDF();

//First
domtoimage.toPng(document.getElementById('page'))
.then(function (dataUrl) {
           doc.addImage(dataUrl, 'png', 15, 10, 180, 280);
           doc.addPage();
});
//Second
domtoimage.toPng(document.getElementById('page2'))
.then(function (dataUrl) {
            doc.addImage(dataUrl, 'png', 15, 10, 180, 280);    });
//Third
doc.save("file.pdf");

我找到了这个解决方案:https://api.jquery.com/jquery.when/但由于我不熟悉承诺,所以我不知道如何让它发挥作用。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

试试。

var doc = new jsPDF();

//First
domtoimage.toPng(document.getElementById('page'))
.then(function (dataUrl) {
    doc.addImage(dataUrl, 'png', 15, 10, 180, 280);
    doc.addPage();
    domtoimage.toPng(document.getElementById('page2')).then(function (dataUrl) {
        doc.addImage(dataUrl, 'png', 15, 10, 180, 280);
        doc.save("file.pdf");
    });
});

答案 1 :(得分:1)

你可以试试这个:

var doc = new jsPDF();

//First
domtoimage.toPng(document.getElementById('page'))
.then(function (dataUrl) {
           doc.addImage(dataUrl, 'png', 15, 10, 180, 280);
           doc.addPage();

           //Second
           domtoimage.toPng(document.getElementById('page2'))
              .then(function (dataUrl) {
                  doc.addImage(dataUrl, 'png', 15, 10, 180, 280);

                  //Third
                  doc.save("file.pdf");    
              });

});

答案 2 :(得分:1)

您可以使用$ .when()来实现此目的。

function func1(){
  domtoimage.toPng(document.getElementById('page'))
   .then(function (dataUrl) {
       doc.addImage(dataUrl, 'png', 15, 10, 180, 280);
       doc.addPage();
  });
}

function func2(){
  domtoimage.toPng(document.getElementById('page2'))
  .then(function (dataUrl) {
        doc.addImage(dataUrl, 'png', 15, 10, 180, 280);    });
}

$.when(func1(), func2())
 .done(function(){
    doc.save("file.pdf");
  }).fail(function(){
       console.log('failure');
 });

答案 3 :(得分:1)

尝试以下内容:

var doc = new jsPDF();

$.when(fn1()).done(function (v1) {
  console.log(v1);
});

//First
function fn1() {
  domtoimage.toPng(document.getElementById('page'))
    .then(function (dataUrl) {
      doc.addImage(dataUrl, 'png', 15, 10, 180, 280);
      doc.addPage();

      // Call next function.
      $.when(fn2()).done(function(v2) {
        console.log(v2);
      });
  });

  return 'success';
}

//Second
function fn2() {
  domtoimage.toPng(document.getElementById('page2'))
    .then(function (dataUrl) {
      doc.addImage(dataUrl, 'png', 15, 10, 180, 280);

      // Call next function.
      $.when(fn3()).done(function(v3) {
        console.log(v3);
      });
    });

  return 'success';
}

//Third
function fn3() {
  doc.save("file.pdf");

  return 'success';
}