【问题标题】:Waiting for async request to return before proceeding Google Apps Script在继续执行 Google Apps 脚本之前等待异步请求返回
【发布时间】:2017-11-05 15:35:14
【问题描述】:

我目前正在生成的 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 属性通过异步请求进行评估,然后再继续执行我的脚本的其余部分?

【问题讨论】:

    标签: javascript asynchronous google-apps-script web-applications


    【解决方案1】:

    如果您使用 nodejs,我的建议是使用 events 模块,因为它允许您创建事件监听器。

    所以你可以做类似的事情

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

    编辑:抱歉,我错过了这篇文章,但您仍然可以使用 Google Apps Event Objects 进行面向事件的开发

    【讨论】:

    • 正如问题所述,我使用的是 Google Apps 脚本,所以 nodejs 不是一个选项。
    【解决方案2】:

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

    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();
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      相关资源
      最近更新 更多