如何在一个承诺中包装google oauth授权回调?

时间:2018-05-12 15:29:44

标签: javascript node.js rest google-apps-script promise

我已经将google nodejs快速启动examples中的一个作为如何执行oauth的模型,将其重新编写为类对象,以便将其包含在我的大型项目中。我可以成功运行应用程序脚本api调用scripts.run并在类对象中获取有效的返回值,但不能如何将其返回到包含项目。

包含函数的scripts.run看起来像这样

  Goo.prototype.testAuth = function( auth ){
     var script = google.script('v1');
     var cmd = {
        auth,
        resource: { function: 'test_auth', devMode: true },
        scriptId: '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
     };

     script.scripts.run(
        cmd,
        function( err, resp ){
        if( err ){ console.log('The API returned an error: ' + err);return }
        if( resp.error ){console.log('Script error message: '
                             + resp.error.details[0].error.errorMessage);}
        else {
           console.log('resp from api call', resp.response.result );
           return resp.response.result ;
        }
     });

  };

使用返回resp.response.result  是有问题的部分,因为它没有传回容器中的 var response

 var Goo = require('./Goo.js');
 var goo = new Goo();
 var response = goo.test_auth();
 console.log('response to use elsewhere ',response);

正如熟悉的那样,Goo类中的console.log返回一个值,而容器中的console.log返回undefined。

如果重要的话,所有Goo课程都会被包裹起来

  (function(){
     var Goo = (function(){
        var Goo = function(config){
        }
        Goo.prototype.test_auth = function(){
            this.authorize( this.testAuth );
        };
        Goo.prototype.testAuth = function(){};
        Goo.prototype.authorize = function(){};
     })();
     module.exports = Goo;
  })();

我应该如何构造它以返回要在容器中使用的值?

我不清楚我是否应该尝试将script.scripts.run包装在一个承诺中,如果它已经返回一个承诺并且我不知道如何等待它返回或者,如果我处理回调函数这一事实导致错误的解决方案。欢迎任何指导。

我使用的是node.js和googleapis ^ 24.0.0

0 个答案:

没有答案