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

$。每個(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 --> 

,當我使用$。每次回調然後循環不工作synchronous.Iterate不會等待功能complete.Can任何人幫助我。

將盡一切努力理解

謝謝!

+0

在這裏每個$,你已經註冊同步回調,但以什麼順序,他們將被稱爲不保證。 –

+0

那麼問題的症狀是什麼,moduleHtml的順序是錯誤的? – James

回答

0

您已經定義了功能module1module2modulesDemo數組你把名字爲:(?注意下劃線)

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

這些名字不是實際的功能名稱不同。所以你的功能沒有被調用。

編輯: 根據您的評論,您的問題不能被複制。請參閱下面的代碼片段。

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如果那是一個輸入錯誤,那麼這個問題就不能被複制。 –

-1

exportDashboard纔可以使用的setTimeout function.May是這將幫助你