Ich schrieb einen Google Apps-Skript-Code, es wird ein Google-Tabellenblatt öffnen und die Werte nach Zeilen auflisten, aber es gibt 2 Probleme: 1. Die Ausgabe in zufälliger Reihenfolge. 2. Der Div-Text mit der ID "loding" ändert sich in "Finished!" vor Liste aller Werte. Ich dachte, das Skript wird auf die serverseitige Funktionsrückgabe warten, wenn ich es mit "withSuccessHandler()" ausführe, aber das ist es nicht. Wie kann ich das korrigieren?Wie google apps Skript serverseitige Funktionen synchron aufrufen?
index.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function jsListValue() {
// Get count.
google.script.run.withSuccessHandler(function(count) {
// List all values.
for(count; count>0; count=count-1) {
// Get a value.
google.script.run.withSuccessHandler(function(content) {
// Shows in "output".
var new_div = document.createElement("div");
new_div.appendChild(document.createTextNode(content));
document.getElementById("output").appendChild(new_div);
}).gsGetValue(count);
}
// Change loding notice.
document.getElementById("loding").innerHTML = "Finished!";
}).gsGetCount();
}
</script>
</head>
<body onload="jsListValue()">
<div id="output"></div>
<div id="loding">Loding now...</div>
</body>
</html>
code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('index').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function gsOpenSheet() {
// Return sheet of the note data.
return (SpreadsheetApp.openById("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").getSheetByName("sheet1"));
}
function gsGetCount() {
// Return last row index in this sheet.
return (gsOpenSheet().getLastRow());
}
function gsGetValue(index) {
// Return value in the (index,1).
return (gsOpenSheet().getRange(index,1).getValue());
}
Sie nicht einzelne Werte in diesem Fall bekommen sollte. Sie müssen in diesem Fall keine individuellen Werte abrufen, da der Index die Zeile ist und die Zeilen alle zusammenhängend sind. Wenn Sie nicht zusammenhängende Zeilen benötigen, wäre das anders. Sie führen mehrere schnelle Aufrufe an dieselbe serverseitige Funktion aus. Die Reihenfolge, in der die Serverseite funktioniert, kann in dieser Situation nicht garantiert werden. Mehrere Instanzen derselben Funktion werden gleichzeitig ausgeführt. Sie werden nicht unbedingt in der Reihenfolge ausgeführt, da serverseitige Funktionen gleichzeitig ausgeführt werden können. –
Zugehörig: http://stackoverflow.com/questions/35749500/client-javascript-receiving-outdated-values-from-server-side-document-set-and-fe/35752170 –