gpt4 book ai didi

javascript - 我可以使 node.js FTP 同步吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:17:38 24 4
gpt4 key购买 nike

我有一个小的 FTP 脚本,它基本上将整个目录树(通过 fs.readdir 遍历)一次一个文件传输到 FTP 服务器(我必须对每个文件进行一些分析上传的文件因此是一次一个的行为)。

但是,执行单个文件的位(对于使用 c.mkdir 而不是 c.put 的目录还有另一位)看起来像这样:

console.log('Transferring [' + ival + ']');
var c = new Ftp();
c.on('ready', function() {
c.put(ival, ival, function(err) {
console.log(err);
});
c.end();
});

如您所见,它使用了一种非常简单的登录方法,即失败会简单地发送到控制台。

不幸的是,由于 FTP 是异步完成的,错误以与文件名输出完全无关的顺序传送到控制台。

有没有办法强制 FTP 同步完成,以便错误会立即跟在文件名之后?基本上,我希望从初始 console.log 到最终 }); 的整个序列在移动到下一个文件之前完成。

最佳答案

即使有,也不推荐。您通常不想用这么长的同步操作来阻塞事件循环。

可能更有用的是使用递归或 Promises 来确保事情按顺序发生。

例子:

let ivals = [/* lots of ivals here */];
function putItems(ivals) {
let ival = ivals[0];
console.log('Transferring [' + ival + ']');
var c = new Ftp();
c.on('ready', function() {
c.put(ival, ival, function(err) {
console.log(err);
c.end();
// Don't continue if we're out of items.
if (ivals.length === 1) { return; }
putItems(ivals.slice(1)); // Call again with the rest of the items.
});
});
}

putItems(ivals);

使用嵌套函数和单个 FTP 上下文可能可以更智能地完成此操作。但是你明白了。

关于javascript - 我可以使 node.js FTP 同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33934369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com