2013-06-04 112 views
0

我在我的網站上啓用了WCF-Ajax。如何知道javascript所有異步操作何時結束?

我需要異步保存文件,但最終我需要知道所有異步操作何時完成。

function test() 
{ 
    for (var i = 0; i < arr.length; i++) { 
     saveFileService.SaveFile(arr[i], onSaveFileComplete); 
    } 

    //TODO: CHECK THAT **ALL** FILE SAVES ARE DONE 
} 

function onSaveFileComplete(result) 
{ 
    // ONE FILE SAVE ENDED SUCCESSFULLY 
} 

如何編寫「TODO」部分?

回答

2

只需使用一個全球性的反...

var fiesCurrentlySaving = 0; 

function test() 
{ 
    for (var i = 0; i < arr.length; i++) { 
     // Increase counter for the number of files saving 
     filesCurrentlySaving++; 

     // Save the file 
     saveFileService.SaveFile(arr[i], onSaveFileComplete); 
    } 
} 

function onSaveFileComplete(result) 
{ 
    // Reduce the file counter 
    filesCurrentlySaving--; 

    if (filesCurrentlySaving <= 0) 
    { 
     // Do whatever you need to do now! 
    } 
} 
1

您可以維護一個計數器變量並在完成回調中增加它。當它到達arr.length時,所有文件都將被處理。

是這樣的:當你保存文件

function test() 
{ 
    var processedFiles = 0, fileCount = arr.length; 
    for (var i = 0; i < fileCount; i++) { 
     saveFileService.SaveFile(arr[i], function() { 
      // One file save ended successfully. 
      if (++processedFiles == fileCount) { 
       // All files have been processed. 
      } 
     }); 
    } 
} 
0

試試這個

function test() 
{ 
    for (var i = 0; i < arr.length; i++) { 
saveFileService.SaveFile(arr[i], onSaveFileComplete); 
    if(i == arr.length) 
    { 
     //TODO: CHECK THAT **ALL** FILE SAVES ARE DONE 
    } 
} 
}