在继续使用Google Apps脚本之前等待异步请求返回

时间:2017-06-04 21:55:12

标签: javascript asynchronous google-apps-script

我目前正在制作的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属性?

2 个答案:

答案 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进行面向事件的开发