前質問の続きです。
https://teratail.com/questions/375227
前質問の概要
非同期処理のやり方が分からない→解決
単体での処理は、出来ました。
しかし、複数の同期処理(?)を行うと途中で動かなくなります。この処理を100回ほど繰り返したいのですがたった二つの処理だけで止まるので困っています。
例えば以下の処理。
Javascript
////////////////////////////////////////////////////////////第一処理 function GasWriteAsync(str1) { return new Promise(resolve => { google.script.run .withSuccessHandler(resolve) .write1(str1); }); } (async () => { for(i = 0; i < 10; i++){ // strは変数で+iで変更される前提 await GasWriteAsync(str1); } })(); ////////////////////////////////////////////////////////////第二処理 function GasWriteAsync(str2) { return new Promise(resolve => { google.script.run .withSuccessHandler(resolve) .write2(str2); }); } (async () => { for(i = 0; i < 10; i++){ // strは変数で+iで変更される前提 await GasWriteAsync(str2); } })();
GASGAS
////////////////////////////////////////////////////////////第一処理 function write1(aa) { var sheet = openSheet(); //最終行を取得 var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 4); var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP); Logger.log(lastRng_nyusyuko.getA1Notation()); //最終行のセルをアクティブ化して、一個下のセルに情報を追加 const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation()); range_nyusyuko.offset(0, 0).activate(); let activeCell_nyusyuko = sheet.getActiveCell(); let selectedRow_nyusyuko = activeCell_nyusyuko.getRow(); let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn(); sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa]) resolve(); } ////////////////////////////////////////////////////////////第二処理 function write2(aa) { var sheet = openSheet(); //最終行を取得 var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 5); var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP); Logger.log(lastRng_nyusyuko.getA1Notation()); //最終行のセルをアクティブ化して、一個下のセルに情報を追加 const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation()); range_nyusyuko.offset(0, 0).activate(); let activeCell_nyusyuko = sheet.getActiveCell(); let selectedRow_nyusyuko = activeCell_nyusyuko.getRow(); let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn(); sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa]) resolve(); }
また、私の考えだと第一処理が終わってから第二処理に処理されると考えていたのですが、実際はこのようになりました。
同期処理にしているのにこの様な動作がするのはなぜでしょうか。
第一処理
↓
第二処理
第一処理
↓
第二処理
第一処理
↓
第二処理
第一処理
↓
.....
よろしくお願いいたします。
まだ回答がついていません
会員登録して回答してみよう