javascript - Google Apps 脚本有 promise 吗?

标签 javascript google-apps-script google-sheets promise

我有一个用户输入数据的表单,我使用 onFormSubmit 触发脚本,该脚本根据插入的数据创建 CSV,在创建 CSV 文件后,我删除数据。问题是我在创建 CSV 文件之前删除了数据。通常我只会打一个 promise 电话,但我认为使用 Google Apps Script 是不可能的。有什么替代品吗?

所以我的完整代码在这里:

更深入地了解它的作用: 当我收到新的表单条目时,“Avaliacao”工作表会更新并将触发 testTrigger()。

然后,它将在 LastUser 城市中写入电子邮件和用户城市,以便它可以查找一些我将用于构建 CSV 文件的数据。但是在工作表完成其 VLOOKUP 调用之前调用了 saveAsCsv 函数。所以我的 CSV 文件是空的。

我遇到的另一个同步问题是,如果我启用 sLastUser.clear(); 行,它也会在创建 CSV 之前删除。

function testTrigger () {
  //open the sheets
  var SS = SpreadsheetApp.getActiveSpreadsheet();
  var sAvaliacao = SS.getSheetByName("Avaliação");  
  var sPreCSV = SS.getSheetByName("PreCSV");  
  var sInput = SS.getSheetByName("Input");    
  var sLastUser = SS.getSheetByName("LastUser"); 
  var dAvaliacao = sAvaliacao.getDataRange().getValues();
  var dInput = sInput.getDataRange().getValues();

  var avaliacaoLastRow = sAvaliacao.getLastRow()-1;

  var userEmail = dAvaliacao[avaliacaoLastRow][2];
  var userCity = dAvaliacao[avaliacaoLastRow][5];
  var userId = dInput[3][52];

  sLastUser.appendRow([userEmail, userCity]);

  saveAsCSV(userId);
//  sLastUser.clear();   <== this is the line where I can`t enable
}

function saveAsCSV(csvName) {
  // Name
  var fileName = String(csvName) + ".csv"
  // Calls convertcsv
  var csvFile = convertOutputToCsv_(fileName);
  // create the file on my drive
  DriveApp.createFile(fileName, csvFile);
}

function convertOutputToCsv_(csvFileName) {
  // open sheets
  var sPreCSV = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PreCSV");
  var cont = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Input").getDataRange().getValues()[3][50] + 1;

  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PreCSV").getRange(1, 1, cont, 3);
  try {
    var data = ws.getValues();
    var csvFile = undefined;

    // Loop through the data in the range and build a string with the CSV data
    if (data.length > 1) {
      var csv = "";
      for (var row = 0; row < data.length; row++) {
        for (var col = 0; col < data[row].length; col++) {
          if (data[row][col].toString().indexOf(",") != -1) {
            data[row][col] = "\"" + data[row][col] + "\"";
          }
        }

        // Join each row's columns
        // Add a carriage return to end of each row, except for the last one
        if (row < data.length-1) {
          csv += data[row].join(",") + "\r\n";
        }
        else {
          csv += data[row];
        }
      }
      csvFile = csv;
    }
    return csvFile;
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}

最佳答案

现在引擎 v8 Promise 是定义对象

关于javascript - Google Apps 脚本有 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561735/

相关文章:

javascript - 如何在 CSS 中创建箭头(3 行)?

javascript - 使用嵌套在两个键内的 JSON 代码创建一个数组

regex - 谷歌表替换正则表达式公式

google-sheets - 如何在同一张工作表中拥有多个数据透视表?

google-sheets - 在另一个键范围中查找一个键范围以获取所有对应的值,而不仅仅是第一个

javascript - 如何将具有相同属性的对象合并到一个数组中?

javascript - 对象值未更新且不知道原因

javascript - "make this a quiz"并在 Google 电子表格脚本中使用 FormApp 创建答案键

javascript - 在 Google 电子表格中删除坐标或范围无效的图表

javascript - Google 电子表格 : conditional, 包含从不同电子表格导入的行