使用JSON动态创建内容的函数将未定义的返回到javascript中的外部函数调用

使用JSON动态创建内容的函数将未定义的返回到javascript中的外部函数调用,javascript,html,json,Javascript,Html,Json,我想为一项作业制作一个待办事项列表应用程序。代码片段如下所示 函数生成器列表(){ var xhttp=newXMLHttpRequest(); xhttp.onreadystatechange=函数(){ if(this.readyState==4&&this.status==200){ var response=JSON.parse(this.responseText); var输出=”; for(设i=0;i

我想为一项作业制作一个待办事项列表应用程序。代码片段如下所示

函数生成器列表(){
var xhttp=newXMLHttpRequest();
xhttp.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
var response=JSON.parse(this.responseText);
var输出=”;
for(设i=0;i

文件
成功

这是因为
xhttp.onreadystatechange
异步执行,并且
generateList()
立即为此调用返回
未定义的

let temp = generateList(); //this just returns undefined
document.querySelector("tbody").innerHTML = temp;
在上述调用中,
temp
将是
未定义的
,因为函数(
generateList
)没有返回任何内容(
falsy
)。然后,
xhttp.onreadystatechange
继续执行其通常的异步调用,获取数据并处理
输出。因此,您可以在操作
输出后调用另一个函数

注意,由于上述原因,
返回输出实际上什么都不做

所以,这就是你能做的:

xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      var response = JSON.parse(this.responseText);
      var output = "";
      for (let i = 0; i < response.length; i++) {
        ....
        ....
        output += '...'
      }
      callFunction(output) //invoke a function with this output
      // document.querySelector("tbody").innerHTML = output;
      return output; //NOT needed
    }

您还可以继续使用
publisher
subscriber
体系结构,在接收到响应后,一个事件将与
输出一起调度,并且将有一个订阅者“监听”它,它将使用此输出。

我是否可以得到实际结果?@mikhillmc现在看到,如果足够清楚,请告诉我
callFunction(output){
  //here you can do anything with the output. for e.g
  document.querySelector("tbody").innerHTML = output;

}