Javascript 如何使函数在其他函数完成后运行

Javascript 如何使函数在其他函数完成后运行,javascript,Javascript,我试过这个: var showBoth = function(str, x) { showgrade(str, x); showsize(str, x); } 但是如果settime退出,如果showgrade花费太多时间,它将停止并运行showsize 当showgrade完成运行时,如何使showsize运行 这是我的全部功能 var showBoth = function(str, x) {`enter code here` show

我试过这个:

var showBoth = function(str, x) {
       showgrade(str, x);
       showsize(str, x);
     }
但是如果
settime
退出,如果
showgrade
花费太多时间,它将停止并运行
showsize

showgrade
完成运行时,如何使
showsize
运行

这是我的全部功能

var showBoth = function(str, x) {`enter code here`
        showgrade(str, x);
        setTimeout(function(){showsize(str, x)},500);
     }
试试这个:

 function showsize(str,x)
    {
        if (str=="")
          {
          document.getElementById("txtHintsize"+x+"").innerHTML="";
          return;
          } 
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            document.getElementById("txtHintsize"+x+"").innerHTML=xmlhttp.responseText;
            }
          }

        xmlhttp.open("GET","Function/ShowSize.php?q="+str,true);
        xmlhttp.send();
    }
    function showgrade(str,x)
    {
        if (str=="")
          {
          document.getElementById("txtHintgrade"+x+"").innerHTML="";
          return;
          } 
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            document.getElementById("txtHintgrade"+x+"").innerHTML=xmlhttp.responseText;
            }
          }

        xmlhttp.open("GET","Function/ShowGrade.php?q="+str,true);
        xmlhttp.send();
    }
     var showBoth = function(str, x) {
        showgrade(str, x);
        setTimeout(function(){showsize(str, x)},500);
     }
然后将showgrade更改为如下所示:

var showBoth = function(str, x) {`enter code here`
    showgrade(str, x, function(){ showsize(str, x); });
 }

像这样更改您的
showgrade
函数的
xmlhttp.onreadystatechange

function showgrade(str, x, callback){
   //DO WHAT YOU WANT HERE
   callback.call();
}

当AJAX请求返回响应时,它将调用
onreadystatechange
函数,这将标记函数的结束。因此,我们只需从该函数中调用
showsize

“如何在showgrade完成运行后运行showsize”-这就是您的第一个代码所做的。showgrade()做什么?这是一个AJAX调用吗?它是否使用其他异步元素(超时、动画等)?不清楚您在问什么。在问题标题中,您询问
如何使函数运行到另一个函数完成
,但在问题本身中,您询问
如何使函数在另一个函数完成运行后运行
。你想要哪个?它将显示等级和大小取决于我选择的产品,它有很多值,这是showsiZe和grade@JohanesChan您能给我们展示一下
showgrade
showsize
的实现吗?如果
//在这里做您想做的事
是异步的,回调在完成之前仍将被调用。如果是异步的,则需要等到收到响应后再进行回调。call();对不起,我知道我要试试,希望它能用它没用,只有一个在用你什么意思?这是小提琴。没有工作,只是在展示自己
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("txtHintgrade" + x + "").innerHTML = xmlhttp.responseText;
    }
    showsize(str, x);
}