2017-06-19 182 views
0

我使用功能webkitgetasentry上傳文件(包括文件夾) (拖放使用)以下如何在完成異步功能(webkitgetasentry,文件上載)後捕獲?

是我的代碼

function drop(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    //call start modal (waiting file uploading...) 
    var items = e.dataTransfer.items; 
    for(var i=0; i<items.length; i++){ 
     var item = items[i].webkitGetAsEntry(); 
     if (item){ 
      callmyfunction(item); 
     } 
    } 
    //start modal close 
} 

callmyfunction做文件上傳。

但這段代碼運行異步。

所以開始模式callmyfunction之前關閉所有完整

我怎樣才能啓動模式時關閉所有callmyfunction完成?

+0

將callback傳遞給callmyfunction,並在其內部啓動模態關閉 – Aigloun

+0

您可以使其同步。一種方法是使用'promises'或'generators'。或「異步功能」 – Jalil

回答

1

callmyfunction異步函數應該接受一個回調參數,以便您可以處理那裏的模態關閉。例如:

function callmyfunction(item, cb) { 
    // do uploading... 
    // execute cb after upload 
    cb(); 
} 

function drop(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    //call start modal (waiting file uploading...) 
    var items = e.dataTransfer.items; 
    for(var i=0; i<items.length; i++){ 
     var item = items[i].webkitGetAsEntry(); 
     if (item){ 
      callmyfunction(item, function() { 
       // close modal 
      }); 
     } 
    } 
} 

另一種選擇是使用Promise