gmxyb
gmxyb
  • 发布:2015-12-26 16:19
  • 更新:2015-12-28 11:32
  • 阅读:2286

目录遍历,多次调用后,结果不正确(已解决)

分类:HTML5+
function GetDirInfo()  
{  
  var mq = '/storage/emulated/0/tencent/msflogs/com/tencent/mobileqq/';  
  var mqsz = 0;  
  var mqfs = 0;  
  plus.io.resolveLocalFileSystemURL(mq,  
    function(dirent){  
      alert('OK');  
      var dirRd = dirent.createReader();  
      dirRd.readEntries(  
        function(subents){  
          if(!subents) return;  
          for(var i=0; i<subents.length; i++) {  
            subents[i].getMetadata(  
              function(metadata){  
                mqsz += metadata.size;  
                mqfs += 1;  
              },  
              function(ex){  
                alert(ex.message);  
              },  
              false  
            );  
          }  
          // 显示结果  
          alert('Size = ' + mqsz + '('+ (mqsz/1024.0/1024.0).toFixed(2)  +' MB)' + ', File = ' + mqfs);  
        },  
        function(ex) {  
          alert(ex.message);  
        }  
      );  
    },  
    function(ex){  
      alert(ex.message);  
    }  
  );  
}

遍历目录下的文件,计算文件的大小之和。点 button 调用 GetDirInfo(),点第一次正确,多点几次就会出现不正确的结果(遍历出来文件比实际少)。不知道是bug,还是我用法不对。。

2015-12-26 16:19 负责人:无 分享
已邀请:
gmxyb

gmxyb (作者)

。。。我好象明白了什么,subents[i].getMetadata 这个是异步回调执行的,在循环之后直接alert 结果是不是有问题啊?

maq

maq

是这个道理。问题是,为啥会【点第一次正确】呢?

gmxyb

gmxyb (作者)

改了一下,这回OK了~~

function GetDirInfo()  
{  
  var mq = '/storage/emulated/0/tencent/msflogs/com/tencent/mobileqq/';  

  var mqsz = 0;  
  var mqfs = 0;  

  plus.io.resolveLocalFileSystemURL(mq,  
    function(dirent){  
      alert('OK');  
      var dirRd = dirent.createReader();  
      dirRd.readEntries(  
        function(subents){  
          if(!subents) return;  
          //var i = subents.length - 1;  
          var subent_get_md = function(idx) {  
            if(idx<0) {  
              alert('Size = ' + mqsz + '('+ (mqsz/1024.0/1024.0).toFixed(2)  +' MB)' + ', File = ' + mqfs);  
              return;  
            }  
            subents[idx].getMetadata(  
              function(metadata){  
                mqsz += metadata.size;  
                mqfs += 1;  
                subent_get_md(idx-1);  
              },  
              function(ex){  
                alert(ex.message);  
                subent_get_md(idx-1);  
              },  
              false  
            );  
          }  
          subent_get_md(subents.length - 1);  
        },  
        function(ex) {  
          alert(ex.message);  
        }  
      );  
    },  
    function(ex){  
      alert(ex.message);  
    }  
  );  
}

该问题目前已经被锁定, 无法添加新回复