1.スプレッドシートの、上の行に入っているSUM関数を、
google Formの回答を新たに追加する下の行にコピーします。
2.その上で、回答行をfirebaseにアップします。
コードを実行すると、1のコピー処理がまだ反映されていないのに、2が実行されてしまいます。
1の処理を待ってから、
2の処理を実行してもらいたいと考え、
1と2の間に、下記コードを、どこかのWEBサイトから拾ってきて(注1)挿入しました。
・・・が、まったく挙動は変わりませんでした。
googleAppScript
1 // Get a script lock, because we're about to modify a shared resource. 2 var lock = LockService.getScriptLock(); 3 // Wait for up to 30 seconds for other processes to finish. 4 lock.waitLock(30000); 5 6 if (!lock.hasLock()) { 7 Logger.log('Could not obtain lock after 10 seconds.'); 8 }
ご質問したいことは2つです。
1.上記のコードでは、30000ミリ秒待機するように読めます。
ですが実際に処理にかかった時間は1−2秒でした。
30秒待機するというものでないのだとしたら、このコードの役割をどのように解釈するのが正しいのでしょうか?
2.async → await 的な「この値を得るまで、次の処理は待って下さい」・・・というコードを書くための、google app scriptにおける「正しい方法」があれば、お教え下さい。
どうぞ、よろしくお願いします。
function up_to_firestore() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName('kaitou1'); //《タイトル行取得部分》 var firstRange = sheet1.getRange(2, 5, 1,7); var firstRowValues = firstRange.getValues(); var titleColumns = firstRowValues[0]; //回答データ取得 var sheetData = sheet1.getSheetValues(3, 5, sheet1.getLastRow(), 7); //ループ開始 sheetData.forEach(function(value, index) { // 済による分岐 if (value[0] !="" && value[6] !="済") { sheet1.getRange(3+index, 11).setValue("済"); sheet1.getRange(2+index,9,1,2).copyTo(sheet1.getRange(3+index,9,1,2)); // コピー処理終わるまで待機させる・・・つもりが、 var lock = LockService.getScriptLock(); // Wait for up to 30 seconds for other processes to finish. lock.waitLock(30000); if (!lock.hasLock()) { Logger.log('Could not obtain lock after 10 seconds.'); } //その行データをrowValuesに入れる var rowValues = sheetData[index]; //JSONArrayつくる var jsonArray = []; var json = new Object(); for(var j=0; j<titleColumns.length; j++) { json[titleColumns[j]] = rowValues[j]; } jsonArray.push(json); // CloudFirestoreの認証とUP var firestore = firestoreData(); try{ firestore.createDocument(●●●, jsonArray); }catch(e){ Logger.log("エラー:" + e.message)//同じドキュメント名が合った場合は、新しい方にデータを更新 firestore.updateDocument(●●●, jsonArray); } } }); }
注1:1年以上前に、ネットで探して拾ったコードなので、URL情報をご提供できません…。
> 1.スプレッドシートの、上の行に入っているSUM関数を、
> google Formの回答を新たに追加する下の行にコピーします。
この具体的なコードがわからないと回答は難しいです。
コメントをどうもありがとうございます。
只今、修正、追記致しました。
ご検討を、宜しくお願い致します。
昔おなじようなところに陥ったのですが、HTMLやCSSと違いjs系は、コピペで貼り付けて実装というわけにいかないので、遠回りすると思います。
penguin520様、ご丁寧にどうもありがとうございます。gasでawaitにあたるような機能が、少し複雑な様子でしたが、見つかりましたので、こちらで試してみようと思っています。
そうですか!よかったです。どういう方法か、機会があれば教えて下さい!

回答3件
あなたの回答
tips
プレビュー