handel возвращает объект из dropbix-api (nodejs и express) - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь выполнить простое действие, например загрузить файл в Dropbox, файл успешно загружен. Мне нужен возвращаемый ответ, который содержит имя файла, размер, путь и т. Д.

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

exports.uploadFile =  async function () {
    fs.readFile('./text.txt',  function (err, contents) {
                if (err) {
                     console.log('Error: ', err);
                }
                    uploadFile(contents);
            });
          } ;
async function  uploadFile(fileCont) {
         let dbx =  new Dropbox({ accessToken: APP_KEY });
         await dbx.filesUpload({ path: '/basic4.txt', contents: fileCont })
         .then(function (response) {
           console.log( response);
           return response;
         })
        .catch(function (err) {
             console.log(err);
         });
}

, и я хотел вернуть результат в fron, и поэтому я использовал эту часть:

DriveService.uploadFile()
    .then((success)=>{
        return res.status(200).json({success:true,data:success,message:'list of files recived'});
})
.catch((error)=>{
    return res.status(400).json({success:false,data:{},message:error.message});
})

проблема в том, что успех всегда пуст, так как я потерялся в асинхронном лесу.

может кто-нибудь посоветует, пожалуйста?

Спасибо

1 Ответ

0 голосов
/ 06 июня 2018

Не уверен, что решение в асинхронном режиме, но вы можете использовать обратный вызов, как это:

exports.uploadFile =  async function (cb) {
    fs.readFile('./text.txt',  function (err, contents) {
                if (err) {
                     console.log('Error: ', err);
                }
                    uploadFile(contents,cb);
            });
          } ;


async function  uploadFile(fileCont,cb) {
         let dbx =  new Dropbox({ accessToken: APP_KEY });
         await dbx.filesUpload({ path: '/basic4.txt', contents: fileCont })
         .then(function (response) {
           console.log( response);
           cb(response);//Pass response in callback
         })
        .catch(function (err) {
             console.log(err);
         });
}
DriveService.uploadFile(function(success) {//this callback will be called from async 
 return res.status(200).json({success:true,data:success,message:'list of files recived')
})
.catch((error)=>{
    return res.status(400).json({success:false,data:{},message:error.message});
})
...