2017-05-30 10 views
-4
var modulesDemo = ['module1', 'module2']; 
var moduleHtml='', pdfContent=''; 

$ .each(modulesDemo、関数(指数、モジュール){使用コールバック関数は、ループが完全に機能を待たない

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 --> 

私が$ .eachにコールバックを使用しています、ループは、誰もが私を助けcomplete.Can synchronous.Iterateが機能を待たずに機能していません。

あらゆる努力は

感謝を理解されるであろう!

+0

を助けることfunction.May、あなたは同期コールバックを登録していますが、どのような順序でそれらを呼び出すことでしょう保証されません。 –

+0

問題の症状は何ですか、moduleHtmlの順序が間違っていますか? – James

答えて

0

あなたがmodule1module2などの機能を定義しているが、modulesDemo配列にあなたのように名前を入れている:

var modulesDemo = ["module_1","module_2"]; 

これらの名前は、実際の関数名(?アンダースコアに注意してください)とは異なります。したがって、あなたの関数は呼び出されません。

編集: コメントに基づいて、問題を再現することはできません。以下のコードスニペットを参照してください。 exportDashboard前

var modulesDemo = ['module1', 'module2']; 
 
var moduleHtml='', pdfContent=''; 
 
$.each(modulesDemo, function(index, module) { 
 

 
    if(typeof window[module] === 'function'){ 
 

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

 
      if(modulesDemo.length==index+1){ 
 
       pdfContent += '<table>'; 
 
       pdfContent += moduleHtml; 
 
       pdfContent += '</table>'; 
 
       //$scope.exportDashboardProcess(pdfContent,layout,size); 
 
       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){ 
 
    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); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<canvas id='demoCanvas'></canvas>

+0

申し訳ありませんが修正されました。 var modulesDemo = ["module1"、 "module2"]; お急ぎで書いたのはごめんなさい – Yash

+0

@yashkumar okこれは入力ミスであった場合でも、その場合は問題を再現できません。 –

-1

あなたはsetTimeoutメソッドを使用することができ、これは、ここで$それぞれであなた

関連する問題