こんにちは.
google.script.runの公式ページには, google.script.runを使用して, "any server-side function"を呼び出し可能と書かれています.
下記gsファイルでは, function式を用いて関数hogeを定義しています(問題の行). ー①
この状態で実行すると, ランダムな順番でディスプレイに1から4の数字が表示されます.
そして, ここから関数式を用いた3つのパターンで関数hogeを定義してみました.(全て"hoge(vv)"として呼び出しています)
- var hoge = fucntion hoge(x){return x;}; (両辺に"hoge") → ①と同一の動作 ー②
- var hoge = fucntion (x){return x;}; (左辺に"hoge") → 動作しない ー③
- var hogeNot = fucntion hoge(x){return x;}; (右辺に"hoge") → 動作しない ー④
質問1 : なぜ, ②は動作し, ③の条件では動作しないのでしょうか.
質問2 : async/awaitを使用しているのですが, 画面に表示される数字がランダムな順番になってしまいます. どうしたら良いのでしょうか.
宜しくお願い致します.
gs
1var x; 2 3function doGet() { 4 return HtmlService.createTemplateFromFile("hello").evaluate(); // テンプレートオブジェクトの取得 5} 6 7function hoge(x){ // 問題の行 8 return x; 9}
html
1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <p id="wi">hello</p> 8 <script> 9 function success(get){ 10 document.getElementById("wi").insertAdjacentHTML("afterend","<p>" + get + "</p>"); 11 } 12 13 for (var v=1; v <= 4; ++v){ // aaを4回呼ぶ 14 aa(v); 15 } 16 17 async function aa(vv){ 18 await google.script.run.withSuccessHandler(success).hoge(vv); 19 } 20 </script> 21 </body> 22</html>
追記①
同じサイトを見るとgoole.script.runの戻り値はvoidのようです.
なのでawaitは使用不可でしょうか.
追記②
scriptタグ内を以下のようにしたところ順番に表示されました.
javascript
1 function success(get){ 2 document.getElementById("wi").insertAdjacentHTML("afterend","<p>" + get + "</p>"); 3 if (get > 0 && (get + 1) < 5){ 4 aa(get + 1); 5 } 6 } 7 8 aa(1); 9 10 function aa(vv){ 11 google.script.run.withSuccessHandler(success).withFailureHandler(failed).closer(vv); 12 }
追記③
stackoverflowでも質問してみました.
Different output in 3 anonymous function in GAS
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/25 01:41