我目前正在制作的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属性?
答案 0 :(得分: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 :(得分:0)
如果你正在使用nodejs,那么我的推荐是使用http://mycompany.com模块,因为它允许你创建一个事件监听器。
所以你可以做类似
的事情eventEmitter.on('listener_key', function(){
//your code to be executed after the event
});
funtion emitStuffToListener(){
eventEmitter.emit('listener_key');
}
编辑:对不起,我想念帖子,但您仍然可以使用events进行面向事件的开发