google.script.run を async/await で使う
しかしまぁなんですね、Google Apps Script で、簡単なウェブアプリを作っている、部内SEと化している今日このごろでございまして。
クライアント側の JavaScript コードから、サーバー側の JavaScript コードと通信するとき、google.script.run を使うのが便利だ。サーバー側で doSomething() という関数がオブジェクトを返すように定義しておけば、クライアント側からは、doSomething() と書いて呼び出せる。Web API をかかなくていい。ただ、呼び出したあとの処理の書き方がだるい。
google.script.run
.withSuccessHandler((result)=>{/*result使ってなんかする*/})
.withFailureHandler((error)=>{/*errorを処理する*/})
.doSomething();
実行順に、記述できるように .then とか使いたい。なんなら、async/await 使いたい。使ったことないけど。
で書いてみた。
// Wrap google.script.run
function doSomething() {
return new Promise((resolve, reject) => {
google.script.run
.withSuccessHandler((result) => resolve(result))
.withFailureHandler((error) => resolve(error))
.doSomething();
});
}
👆こんな風にラップしておくと、下のようにかける。
async function foo() {
const result = await doSomething();
/* ... result を使ってあれやこれや ... */
}
ほんとは、doSomething を中で定義せずに書きたかった。Python でいうところの __getattr__ がないので、簡単にはいかなかった。
でも、どうせ呼び出すべき関数名は分かっているんだから、__defineGetter__ を使ったりすればいいんだな、という気分になってきた。
この記事が気に入ったらサポートをしてみませんか?