如何解决无法在nodejs 中更改sftp 客户端的.then() 和.catch() 中的局部变量|天蓝色的函数
我需要通过 azure 函数将文件上传到 sftp 服务器。 我正在使用'ssh2-sftp-client'。 我有我的 index.js,其中正在调用上传函数,并将相关详细信息作为参数发送。
下面是我的上传功能。
function upload(context,host,port,username,folder,dataStream,fileName,encodedPrvKey) {
let privateKeyBuffer=Buffer.from(encodedPrvKey,'base64')
let privateKeyString=privateKeyBuffer.toString();
const config = {
host: host,port: port,username: username,privateKey: privateKeyString
};
let sftp = new Client;
let remote = folder+'/'+fileName;
var status=0;
context.log('starting sftp')
sftp.connect(config)
.then(() => {
console.log('connected')
console.log('uploaded file successfully')
return sftp.put(dataStream,remote);
})
.then(() => {
return sftp.list(folder)
}).then((data)=>{
status=200;
console.log(data)
})
.then(()=>{
return sftp.end();
})
.catch(err => {
status=500;
console.error('Error occured during SFTP upload')
console.error(err)
});
context.log('status--'+status)//this returns undefined
console.log('status--'+status)//this returns 0
return status;
}
代码工作正常,文件正在上传,但我有几个问题需要帮助,
-
我不能在 sftp.connect 中使用 context.log() 吗?知道为什么吗? 使用 console.log() 工作正常,但这些日志会在执行日志完成后打印出来。
-
当我试图访问 .then() 和 .catch() 之外的状态时,它是未定义的。 在同一个函数中,如果我使用 console.log() 打印 - 它是 0,而 context.log() 是未定义的。
这里的任何帮助将不胜感激。我不确定发生了什么,尝试了各种方法,但似乎效果不佳,我的目标是在状态变量的帮助下处理成功和失败的情况,以便可以将相同的状态返回给用户提及操作是否成功。
提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。