代码之家  ›  专栏  ›  技术社区  ›  Uriel Parienti

handel从dropbix api返回对象(nodejs和express)

  •  0
  • Uriel Parienti  · 技术社区  · 6 年前

    我正在尝试执行一个简单的操作,比如将文件上传到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);
             });
    }
    

    我想把结果还给弗隆,所以我用了这个部分:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Ved    6 年前

    不确定异步中的解决方案,但可以使用如下回调:

    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});
    })