I have a web page, which contains a form and an html table.
- The user fills out the form;
- Clicks on ;
- A client side function prepares the data and have
google.script.run.newTask(dataSet);pass the data to the server-side - Another function gets it, makes a tweak or two and writes it to the spreadsheet;
- Run another function that builds that HTML table, bringing the latest data just written
There are not errors, but the table is not built. Do I have to use setTimeout() or something that makes the last function wait for the previous ones to finish?
Here's the client side function:
function addTaskToSheet() {
var formElements = document.getElementById("form").elements;
var postData = [];
for (var i = 0; i < formElements.length; i ) {
if (formElements[i].type != "submit" && formElements[i].type != 'checkbox') { //we dont want to include the submit-buttom
postData.push(formElements[i].value);
} else if (formElements[i].type == 'checkbox' && formElements[i].checked == true) {
postData.push(formElements[i].checked);
} else if (formElements[i].type == 'checkbox' && !formElements[i].checked) {
postData.push('false');
}
}
let timeStamp = new Date();
timeStamp = timeStamp.toString();
const agencyPartner = document.getElementById('agencySelect');
const selectedAgency = agencyPartner.options[agencyPartner.selectedIndex].text;
const client = document.getElementById('clientSelect');
const selectedClient = client.options[client.selectedIndex].text;
let dateAssigned = postData[1].toString();
const item = postData[0];
const link = postData[2];
const notes = postData[3];
const requestApproval = postData[4];
let dataSet = [];
dataSet.push(timeStamp, selectedAgency, selectedClient, '', '', dateAssigned, item, link, notes, '', requestApproval, '', '', '')
console.log(dataSet)
google.script.run.newTask(dataSet);
setTimeout(loadClientTasks(selectedClient), 3000);
}
Thank you!
CodePudding user response:
If another function of Run another function that builds that HTML table, bringing the latest data just written is loadClientTasks, how about the following modification?
From:
google.script.run.newTask(dataSet);
setTimeout(loadClientTasks(selectedClient), 3000);
To:
google.script.run.withSuccessHandler(_ => loadClientTasks(selectedClient)).newTask(dataSet);
- By this modification,
loadClientTasks(selectedClient)is run afternewTask(dataSet)was finished.
Note:
If you are required to use
setTimeout, in the case ofsetTimeout(loadClientTasks(selectedClient), 3000),loadClientTasksis run soon because of(selectedClient)ofloadClientTasks(selectedClient). In this case, how about the following modification?To
google.script.run.newTask(dataSet); setTimeout(loadClientTasks.bind(undefined, selectedClient), 3000);or, if you are required to wait after
newTaskwas finished, how about the following modification?google.script.run.withSuccessHandler(_ => setTimeout(loadClientTasks.bind(undefined, selectedClient), 3000)).newTask(dataSet);
