我需要检查文件是否正在上传到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)讨厌的回调嵌套我真的不喜欢。就代码可读性而言,我认为让它同步会更容易。
是否有一种简单的方法可以执行此操作,还是应该使用回调和事件重写?
感谢您的帮助。