2017-06-04 7 views
2

現在、私が作成しているGoogle Apps Scriptのコードでは、非同期要求の結果によって設定されたプロパティの1つを使用してオブジェクトを完成させる必要があります。このオブジェクト、特にこのプロパティは、後で行の下で使用されます。ただし、そのプロパティが必要な関数が実行されるまでにリクエストが返されていないため、正しく評価されていません。 次のように私のコードは次のとおりです。Google Apps Scriptを続行する前に非同期リクエストが返るのを待っている

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を使用してのもの。

スクリプトの残りの部分を続行する前に、asyncリクエストで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'); 
} 

EDITのような何かができる:申し訳ありませんが、私はポストをmissreadそれでもGoogle Apps Event Objects

+0

問題として、私はGoogle Apps Scriptを使用していますので、nodejsはオプションではありません。 – dbr

関連する問題