2017-06-04 101 views
2

我目前正在生产的Google Apps脚本中的某些代码需要完成一个对象,其中一个属性由异步请求的结果设置。这个对象,具体来说,这个属性然后在线以后使用。但是,因为请求在需要该属性的函数运行时还没有返回,所以它们没有正确评估。 我的代码如下:在继续执行Google Apps脚本之前等待异步请求返回

function Thing(val) { 
    var self = this 

    var createSuccess = function(data) { 
     self.foo = data; 
    } 

    var init = function(val) { 
     google.script.run.withSuccessHandler(createSuccess).serverFunc(val); 
    }; 

    init(val); 
} 

function objStuff() { 
    var foobar = new Thing('bar'); 
    // Do stuff with foobar.foo 
} 

objStuff(); 

目前使用foobar.foo不能正常工作,因为剧本没等继续之前脚本的返回值的东西。

在继续我的脚本的其余部分之前,有什么方法可以等待foo属性用异步请求进行评估?

回答

4

您可以添加一个回调作为参数的构造器:

function Thing(val, cb) { 
    var self = this 

    var createSuccess = function(data) { 
     self.foo = data; 
     cb(); // this gets called when data is ready 
    } 

    var init = function(val) { 
     google.script.run.withSuccessHandler(createSuccess).serverFunc(val); 
    }; 

    init(val); 
} 

function objStuff() { 
    var foobar = new Thing('bar', function() { 
     // Do stuff with foobar.foo 
    }); 
} 

objStuff(); 
+1

神奇和死的简单。非常感谢。 – dbr

0

我recomendation是,如果你正在利用的的NodeJS,因为它允许你创建一个事件侦听器使用events模块。

所以你可以做这样的事情

eventEmitter.on('listener_key', function(){ 
    //your code to be executed after the event 
}); 

funtion emitStuffToListener(){ 
eventEmitter.emit('listener_key'); 
} 

编辑:对不起,我missread的帖子,但你仍然可以做面向事件的发展与Google Apps Event Objects

+0

正如问题所述,我使用Google Apps脚本,因此nodejs不是一个选项。 – dbr

相关问题