【发布时间】:2019-04-02 19:19:54
【问题描述】:
在所有承诺都解决后,我如何调用函数?我有一个包含三个表格的 HTML 文档。使用 html2canvas(),我通过在 forEach() 循环中迭代它们来创建 JPG:
JavaScript
var elements = document.querySelectorAll( 'table' );
elements = Array.from( elements );
var zip = new JSZip(),
img = '';
elements.forEach( function( element ) {
html2canvas( element ).then( canvas => {
var styleID = element.getAttribute('id');
img = new Image();
img.src = canvas.toDataURL( 'image/jpeg' );
document.body.appendChild( img );
zip.file( styleID + '.jpg', img.src );
}).then( generateZip );
});
function generateZip () {
// Generate the zip file asynchronously
zip.generateAsync({type:'blob'}).then( function( content ) {
saveAs( content, 'archive.zip' );
});
}
问题是 generateZip() 被调用了 3 次,每个循环调用一次。在解决所有承诺之后,如何只调用一次 generateZip() 来创建一个 zip 文件?
【问题讨论】:
-
Assing 你的承诺到一个数组,然后你可以使用 Promise.all(arrayPromise).then
-
@Lamonde 请添加一个示例,因为我对 Promise 的经验很少。
标签: javascript jquery promise jszip