Javascript 使用$中的回调函数。每个循环不';不要等待功能完成

Javascript 使用$中的回调函数。每个循环不';不要等待功能完成,javascript,jquery,Javascript,Jquery,$.each(模块演示,函数(索引,模块){ if(窗口[模块]的类型=“功能”){ 窗口[模块](功能(内容){ moduleHtml+=内容; if(modulesDemo.length==索引+1){ pdfContent+=''; pdfContent+=moduleHtml; pdfContent+=''; console.log(pdfContent); } }); } })) 函数模块1(回调){ var内容=“”; var canvas=$(“#demoCanvas”)[0];

$.each(模块演示,函数(索引,模块){

if(窗口[模块]的类型=“功能”){
窗口[模块](功能(内容){
moduleHtml+=内容;
if(modulesDemo.length==索引+1){
pdfContent+='';
pdfContent+=moduleHtml;
pdfContent+='';
console.log(pdfContent);
}
});
}
}))

函数模块1(回调){
var内容=“”;
var canvas=$(“#demoCanvas”)[0];
var img=canvas.toDataURL(“image/png”);
内容+='';
内容+='';
内容+='';
内容+='';
内容+='';
回调(内容);
}
函数模块2(回调){
函数模块2(回调){
var-img;
var含量;
html2canvas($(“#demoCanvas1”){
onrendered:函数(画布){
img=canvas.toDataURL(“image/png”);
内容+='';
内容+='';
内容+='';
内容+='';
内容+='';
//警报(2);
回调(内容);
}
});
}
}
当我在$中使用回调时,每个then循环都不是同步工作的。迭代不会等待函数完成。有人能帮我吗

我们将感谢您的一切努力


谢谢

您已将函数定义为
module1
module2
,但在
modulesDemo
数组中,您将名称设置为:

function module1(callback){
    var content=''; 
    var canvas = $("#demoCanvas")[0];
    var img    = canvas.toDataURL("image/png");
    content += '<tr>';
    content += '<td>';
    content += '<img style="width:100%;height:100%;margin-top:20px !important" src="'+img+'" />';
    content += '</td>';
    content += '</tr>';
    callback(content);
}

function module2(callback){
    function module2(callback){
    var img;
    var content;
    html2canvas($("#demoCanvas1"), {
        onrendered: function(canvas) {
            img    = canvas.toDataURL("image/png");
            content += '<tr>';
            content += '<td>';
            content += '<img style="width:100%;height:100%;margin-top:20px !important" src="'+img+'" />';
            content += '<td>';
            content += '</tr>';
            //alert(2);
            callback(content);
        }
    });
}
}

<!-- language: lang-html -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <canvas id='demoCanvas'></canvas>

<!-- end snippet -->
这些名称与实际的函数名称不同(注意下划线?)。所以你的函数没有被调用

编辑: 根据您的评论,您的问题无法复制。请参阅下面的代码片段

var modulesDemo=['module1','module2'];
变量moduleHtml='',pdfContent='';
$.each(模块演示,函数(索引,模块){
if(窗口[模块]类型='功能'){
窗口[模块](功能(内容){
moduleHtml+=内容;
if(modulesDemo.length==索引+1){
pdfContent+='';
pdfContent+=moduleHtml;
pdfContent+='';
//$scope.exportDashboardProcess(pdfContent、布局、大小);
console.log(pdfContent);
}
});
}
});
函数模块1(回调){
var内容=“”;
var canvas=$(“#demoCanvas”)[0];
var img=canvas.toDataURL(“image/png”);
内容+='';
内容+='';
内容+='';
内容+='';
内容+='';
回调(内容);
}
函数模块2(回调){
var内容=“”;
var canvas=$(“#demoCanvas”)[0];
var img=canvas.toDataURL(“image/png”);
内容+='';
内容+='';
内容+='';
内容+='';
内容+='';
回调(内容);
}


在$each中,您已经同步注册了回调,但无法保证它们的调用顺序。那么问题的症状是什么,moduleHtml的顺序错误?抱歉,我已更正。var modulesDemo=[“module1”、“module2”];很抱歉,我是在一封信里写的hurry@yashkumar好的,如果这是一个打字错误,但在这种情况下,您的问题不能复制。
if(typeof window[module] === 'function'){

    window[module](function(content){
        moduleHtml  +=content;

        if(modulesDemo.length==index+1){
            pdfContent += '<table>';
            pdfContent += moduleHtml;
            pdfContent += '</table>';

            console.log(pdfContent);
        }
    });

}
function module1(callback){
    var content=''; 
    var canvas = $("#demoCanvas")[0];
    var img    = canvas.toDataURL("image/png");
    content += '<tr>';
    content += '<td>';
    content += '<img style="width:100%;height:100%;margin-top:20px !important" src="'+img+'" />';
    content += '</td>';
    content += '</tr>';
    callback(content);
}

function module2(callback){
    function module2(callback){
    var img;
    var content;
    html2canvas($("#demoCanvas1"), {
        onrendered: function(canvas) {
            img    = canvas.toDataURL("image/png");
            content += '<tr>';
            content += '<td>';
            content += '<img style="width:100%;height:100%;margin-top:20px !important" src="'+img+'" />';
            content += '<td>';
            content += '</tr>';
            //alert(2);
            callback(content);
        }
    });
}
}

<!-- language: lang-html -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <canvas id='demoCanvas'></canvas>

<!-- end snippet -->
var modulesDemo = ["module_1","module_2"];