What is the idiom and syntax to use google.script.run in its variations to obtain a value from server-side function?  Presumably the data is being returned but isn't handled or caught correctly.  Having referenced the API a more specific link for reference is sought.
How is a variable value passed from Code.js to, here, WebApp.html using either google.script.run or a similar variant.  Each button click should run loadFoo which calls getFoo and should dynamically change content each execution.
Server logs show that foo is being invoked:
ClientSide
    getFoo
    Web App
    Oct 16, 2022, 9:13:25 PM
    0.114 s
    
Completed
Cloud logs
Oct 16, 2022, 9:13:25 PM
Info
baz
but where does the value of foo go?  Here, foo on the client log shows it as initialized and then undefined:
bar
userCodeAppPanel:13 undefined
html:
<!DOCTYPE html>
<html>
<head>
  <base target="_top">
  <script>
    var foo = "foo";
    function loadFoo(){
      foo = "bar";
    console.log(foo);
    foo = google.script.run.withSuccessHandler((success) => {
        document.getElementById("successfulClick").innerHTML = success;
      })
      .getFoo();
      console.log(foo);
      document.getElementById("foo").textContent = foo;
    }
  </script>
</head>
<body>
  <div id="foo">index</div>
  <br> <br> <br> <br> <br> <br>
  <input type="button" value="loadFoo" onclick="loadFoo()" />
</body>
</html>
code:
function getFoo() {
  var foo = "baz"
  Logger.log(foo);
  return foo;
}
function getUrl() {
  Logger.log("getUrl..");
  var url = ScriptApp.getService().getUrl();
  return url;
}
function doGet(e) {
  var htmlOutput = HtmlService.createTemplateFromFile('WebApp');
  htmlOutput.foo = "foo" + getFoo();
  htmlOutput.url = getUrl();
  return htmlOutput.evaluate();
}
The getFoo function clearly returns a string.  By what mechanism or technique is that value sent to the client HTML?  Specifically, to a variable in loadFoo to at least log to the console.