我如何知道javascript所有异步操作何时结束?

我如何知道javascript所有异步操作何时结束?,javascript,asp.net,Javascript,Asp.net,我在我的网站上使用的是WCF Ajax 我需要异步保存文件,但最终我需要知道所有异步操作何时完成 function test() { for (var i = 0; i < arr.length; i++) { saveFileService.SaveFile(arr[i], onSaveFileComplete); } //TODO: CHECK THAT **ALL** FILE SAVES ARE DONE } function onSav

我在我的网站上使用的是WCF Ajax

我需要异步保存文件,但最终我需要知道所有异步操作何时完成

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
}
功能测试()
{
对于(变量i=0;i

如何编写“TODO”部分?

您可以维护一个计数器变量,并在完成回调中递增它。当到达
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.
            }
        });
    }
}
功能测试()
{
var processedFiles=0,fileCount=arr.length;
对于(变量i=0;i
您可以维护一个计数器变量,并在完成回调中递增它。当到达
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.
            }
        });
    }
}
功能测试()
{
var processedFiles=0,fileCount=arr.length;
对于(变量i=0;i
保存文件时,只需使用全局计数器即可

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!
    }
}
var fiesCurrentlySaving=0;
功能测试()
{
对于(变量i=0;i如果(filesCurrentlySaveing只需在保存文件时使用全局计数器即可

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!
    }
}
var fiesCurrentlySaving=0;
功能测试()
{
对于(变量i=0;i
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 
     }   
}
}
功能测试()
{
对于(变量i=0;i
试试这个

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 
     }   
}
}
功能测试()
{
对于(变量i=0;i