gpt4 book ai didi

node.js - SFTP 内部循环 promise 不将文件数据下载到本地文件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:47 25 4
gpt4 key购买 nike

我的总体问题是,一旦我过滤了过去 5 分钟内添加的文件,我就会循环访问返回的对象数组。从那里,我将根远程文件名附加到从过去 5 分钟添加的文件返回的名称。 fastget 不会向我的本地文件写入任何内容。

我已经在循环外测试了附加路由并且它有效,我是否由于某种原因在循环内丢失了我的 promise 数据?

sftp
.connect({
host: "hostaddress",
port: 22,
username: "USERNAME",
password: "PASSWORD"
})
.then(() => {
return sftp.list(root);
})
.then(data => {
//filters new files in last 5 min
const filteredFile = data.filter(file => {
let currentDate = moment();
let CurrentTimeMinusFive = moment().subtract(5, "minutes");
let allAccessTimes = file.accessTime;
let parsedAccessTimes = moment(allAccessTimes);
let filteredTime = moment(parsedAccessTimes).isBetween(
CurrentTimeMinusFive,
currentDate
);
//returns boolean if the file has been added in the last 5 minutes
return filteredTime;
});
//returns full metadata in array of objects
console.log(filteredFile);

//not writing filedata from remote server to localfile
let localPath = "/Users/me/Desktop/DOWNLOADEDSFTP/data.txt";
filteredFile.forEach(file => {
let name = file.name;
return sftp.fastGet(
`remote-path/${name}`,
localPath
);
});
})
.then(() => {
sftp.end();
})
.catch(err => {
console.error(err.message);
});

最佳答案

您正在使用带有 Promise 的 forEach 循环,但它无法按照您期望的方式工作。如果您可以并行执行操作,则需要使用 for..ofPromise.all

for(const file of filteredFile) {
let name = file.name;
await sftp.fastGet(
`remote-path/${name}`,
localPath
);
});

确保你像这样放置异步

.then(async data => {

关于node.js - SFTP 内部循环 promise 不将文件数据下载到本地文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60341285/

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