前質問の続きです。
https://teratail.com/questions/375227
前質問の概要
非同期処理のやり方が分からない→解決
単体での処理は、出来ました。
しかし、複数の同期処理(?)を行うと途中で動かなくなります。この処理を100回ほど繰り返したいのですがたった二つの処理だけで止まるので困っています。
例えば以下の処理。
Javascript
1////////////////////////////////////////////////////////////第一処理 2function GasWriteAsync(str1) { 3return new Promise(resolve => { 4google.script.run 5.withSuccessHandler(resolve) 6.write1(str1); 7}); 8} 9(async () => { 10for(i = 0; i < 10; i++){ 11// strは変数で+iで変更される前提 12await GasWriteAsync(str1); 13} 14})(); 15////////////////////////////////////////////////////////////第二処理 16function GasWriteAsync(str2) { 17return new Promise(resolve => { 18google.script.run 19.withSuccessHandler(resolve) 20.write2(str2); 21}); 22} 23(async () => { 24for(i = 0; i < 10; i++){ 25// strは変数で+iで変更される前提 26await GasWriteAsync(str2); 27} 28})();
GASGAS
1////////////////////////////////////////////////////////////第一処理 2function write1(aa) { 3 var sheet = openSheet(); 4//最終行を取得 5 var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 4); 6 7 var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP); 8 Logger.log(lastRng_nyusyuko.getA1Notation()); 9 10//最終行のセルをアクティブ化して、一個下のセルに情報を追加 11 const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation()); 12 range_nyusyuko.offset(0, 0).activate(); 13 14 let activeCell_nyusyuko = sheet.getActiveCell(); 15 let selectedRow_nyusyuko = activeCell_nyusyuko.getRow(); 16 let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn(); 17 sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa]) 18resolve(); 19} 20 21////////////////////////////////////////////////////////////第二処理 22function write2(aa) { 23 var sheet = openSheet(); 24//最終行を取得 25 var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 5); 26 27 var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP); 28 Logger.log(lastRng_nyusyuko.getA1Notation()); 29 30//最終行のセルをアクティブ化して、一個下のセルに情報を追加 31 const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation()); 32 range_nyusyuko.offset(0, 0).activate(); 33 34 let activeCell_nyusyuko = sheet.getActiveCell(); 35 let selectedRow_nyusyuko = activeCell_nyusyuko.getRow(); 36 let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn(); 37 sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa]) 38resolve(); 39}
また、私の考えだと第一処理が終わってから第二処理に処理されると考えていたのですが、実際はこのようになりました。
同期処理にしているのにこの様な動作がするのはなぜでしょうか。
第一処理
↓
第二処理
第一処理
↓
第二処理
第一処理
↓
第二処理
第一処理
↓
.....
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/03 22:24