Невозможно изменить локальные переменные в .then() и .catch() клиента sftp в функциях nodejs | azure

#node.js #azure #variables #upload #sftp

Вопрос:

Мне нужно загрузить файлы на sftp — сервер с помощью функций Azure. Я использую для этого «ssh2-sftp-клиент». У меня есть 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;
}
 

Код работает абсолютно нормально, файлы загружаются, но у меня есть несколько вопросов, и мне нужна помощь с этим,

  1. Я не могу использовать context.log() внутри sftp.connect ? Есть идеи, почему? Отлично работает с console.log (), но эти журналы печатаются после завершения журналов выполнения.
  2. Когда я пытаюсь получить доступ к статусу вне .then() amp; .catch(), он приходит как неопределенный. В той же функции, если я печатаю с помощью console.log() — значение равно 0, а с помощью context.log() оно не определено.

Любая помощь здесь была бы очень признательна. Я не уверен, что происходит , пробовал разные вещи, но, похоже, не работает хорошо, моя цель состоит в том, чтобы обрабатывать как успешные, так и неудачные случаи с помощью переменной состояния, чтобы один и тот же статус можно было вернуть пользователю, указав, была ли операция успешной или нет.

Заранее спасибо.