如何在每次迭代调用asynchronous选项时等待forEach完成?

好的,这是计划。 浏览每个文件,将文件添加到数组中。 一旦添加完所有文件,然后使用JSZipUtility和Docxtemplater进行合并:

'click .merge-icon': (e) => { var programId = Router.current().url.split('/').pop(); var programObj = Programs.findOne(programId); var insertedDocuments = []; var i = 0; var count = programObj.activityIds.count; var fileDownloadPromise = new Promise((resolve, reject) => { programObj.activityIds.forEach(function(activityId) { var activityObj = Activities.findOne(activityId); var documentObj = ActivityFiles.findOne(activityObj.documents.pop()._id); JSZipUtils.getBinaryContent(documentObj.url(), callback); function callback(error, content) { var zip = new JSZip(content); var doc = new Docxtemplater().loadZip(zip); var xml = zip.files[doc.fileTypeConfig.textPath].asText(); xml = xml.substring(xml.indexOf("<w:body>") + 8); xml = xml.substring(0, xml.indexOf("</w:body>")); xml = xml.substring(0, xml.indexOf("<w:sectPr")); insertedDocuments.push(xml); i++; if (i == count - 1) { resolve(); } } }); }); fileDownloadPromise.then(() => { JSZipUtils.getBinaryContent('/assets/template.docx', callback); function callback(error, content) { console.log(content); var zip = new JSZip(content); var doc = new Docxtemplater().loadZip(zip); setData(doc); } function setData(doc) { doc.setData({ body: insertedDocuments.join('<w:br/><w:br/>') }); doc.render(); useResult(doc); } function useResult(doc) { var out = doc.getZip().generate({ type: 'blob', mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }); saveAs(out, programObj.name + '.docx'); } }); } 

结果什么都没有发生。 这个诺言在这里执行有什么问题?

我只在每个文件加载到数组中时才调用resolve。