节点JS同步检查文件是否正在上传

时间:2015-01-26 14:43:59

标签: node.js ftp sync

我需要检查文件是否正在上传到FTP服务器。我无法控制服务器端(我只是喜欢file.temp重命名),所以我的选择(最好猜测我对FTP的了解)是询问文件大小或在间隔后最后修改。我的问题是我需要这个同步。

function isStillUploading(ftp, filePath) {
  var startFileSize = -1;
  var nextFileSize = -2;

  ftp.size(filePath,
           function sizeReturned(error, size) {
             if (!error) startFileSize = size;
             else startFileSize = -3;
           });

  // CPU-melting style delay.
  var start = Date.now();
  while (Date.now() - start < 500) { }

  ftp.size(filePath,
           function sizeReturned(error, size) {
             if (!error) nextFileSize = size;
             else nextFileSize = -4;
           });

  // This would be better, but I have no way of having 
  // root f wait for this and return a correct boolean.
  //setTimeout(ftp.size(filePath,
  //                    function sizeReturned(error, size) {
  //                      if (!error) nextFileSize = size;
  //                      else nextFileSize = -4;
  //                    }),
  //            500);

  // TODO: add checks for -1 -2 -3 -4
  console.log("File size change: " + startFileSize + ":" + nextFileSize);
  return (startFileSize != nextFileSize);
}

在回调样式中写这个仍然意味着在某个地方重新检查文件的大小或(IMO)讨厌的回调嵌套我真的不喜欢。就代码可读性而言,我认为让它同步会更容易。

是否有一种简单的方法可以执行此操作,还是应该使用回调和事件重写?

感谢您的帮助。

0 个答案:

没有答案