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

dbr*_*dbr 7 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();
Run Code Online (Sandbox Code Playgroud)

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

在继续执行脚本的其余部分之前,有没有一种方法可以等待 foo 属性通过异步请求进行评估?

Pat*_*rts 6

您可以将回调作为参数添加到构造函数:

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();
Run Code Online (Sandbox Code Playgroud)