fs.writeFile() 및 Promise.all에 문제가 있습니다.오류 : promise.all 및 ssh2-sftp-client와의 약속이 하나만있는 파일을 찾을 수 없습니다.
나는 보관 용 상자에서 파일을 가져 와서 서버에 저장하고 여러 SFTP로 보내어 사용할 수 있도록하는 스크립트가 있습니다. 내가 가진 문제는 파일이 존재하지 않는다는 오류를 던지는 내 약속 중 하나가 항상 있다는 것입니다. 나는 어색한 과정에 문제가 있다고 의심하지만 내가 잘못한 것을 발견 할 수는 없다.
ssh2-sftp-client 및 fs 패키지를 사용하고 있습니다.
내 코드의 추출물을 검색 할 수 있습니다 :
//I just got the dropboxfile with promise
.then(function(data) {
myDownloadedFile = data.name
return new Promise((res,rej) => {
fs.writeFile(myDownloadedFile, data.fileBinary, 'binary', function (err) {
if (err) {
throw err
rej("file not saved")
} else {
log.info('File save : ' + data.name)
res()
}
})
})
})
//FTP sending
.then(function() {
return Promise.all([sendFiletoFTP(myConnection1, "partner1"), sendFiletoFTP(myConnection2, "partner2"), sendFiletoFTP(myConnection3, "partner3")])
})
그리고 sendFiletoFTP 기능 아래 : 내가 가진
var sendFiletoFTP = function(FTPObj, myPartenaire) {
return new Promise((res,rej) => {
let sftp = new Client();
sftp.connect(FTPObj).then(() => {
return sftp.put(myDownloadedFile, myDownloadedFile)
})
.then((data) => {
sftp.end()
})
.then(() => {
log.info("OK pour " + myPartenaire + " : " + myDownloadedFile);
res()
})
.catch((error) => {
rej(error)
})
})
}
오류 : 오류 : 파일 SFTP를하는 동안 트리거되는 찾을 수 없습니다. put() 액션.
무엇이 잘못 될 수 있는지 알고 계십니까?
오류의 원인은 표시되지 않지만 promise 생성자 콜백에 'throw'하지 마십시오. 귀하의 경우에는 작동하지만 ' rej()'. 'throw '를 생략하고'rej()'를 수행하는 것이 좋습니다. 또한 두 번째 기능은 새로운 약속을 만들 필요가 없습니다. 'res'를 호출하지 않고'catch '를 사용하지 않고'sftp.connect() .then() .then()'체인을 반환하십시오. – trincot
'myDownloadedFile'은 전역으로 보입니다 (또는 두 코드 스 니펫을 둘러싸는 범위 내에 있어야합니다). 그래서 송신이 끝나기 전에 무언가 * 문제가 될 수 있습니까? ... 왜'sendFiletoFTP' 파일 이름을 받아 들일 수없는'var sendFiletoFTP = function (FTPObj, myPartenaire, filename) {'그리고'sendFiletoFTP (myConnection1, "partner1", myDownloadedFile) –