代码之家  ›  专栏  ›  技术社区  ›  sqlchild

Javascript按顺序执行多个函数

  •  3
  • sqlchild  · 技术社区  · 8 年前

    我有三个函数StepONE、StepSecond、StepTHREE按顺序运行它们。这是按顺序运行的正确方法吗:

    此外,在使用时 StepTWO(StepTHREE()); 顺序出错,所以我这样做是为了让它正常工作: StepTWO(function() { StepTHREE() });

    <div id="stepslog"></div>
    <div id="count"></div>
    <button onclick="Steps()">Start </button>
    <script>
     function Steps() {
      StepONE(function() {
        <!-- StepTWO(StepTHREE()); -->
        StepTWO(function() {
          StepTHREE()
        });
        alert('FINISHED WITH BOTH STEPS');
      });
    }
    function StepONE(callback) {
      <!-- alert('Step ONE'); -->
      document.getElementById('stepslog').innerHTML += '<hr>Step ONE';
      for (i = 1; i < 700; i++) {
        var abc = document.getElementById("count");
        abc.innerHTML += '<br>' + i;
      }
      callback(itemexists);
    }
    function StepTWO(callback, itemexists) {
      <!-- alert('Step TWO'); -->
      document.getElementById('stepslog').innerHTML += '<hr>Step TWO';
      callback();
    }
    function StepTHREE() {
      document.getElementById('stepslog').innerHTML += '<hr>Step THREE';
    }
    </script>
    

    更新时间:

    如何从函数2&返回值;3并最终在StepONE()函数中使用它?回调(itemexists)。。。。这是正确的吗?

    2 回复  |  直到 8 年前
        1
  •  2
  •   brk    8 年前

    尝试使用 Promise.resolve 并链接其余功能

    function Steps() {
      Promise.resolve(StepONE()).then(function(x) {
        console.log('From 1st function ', x);
        return StepTWO();
      }).then(function(y) {
        console.log('From 2nd function ', y);
        StepTHREE();
    
      })
    }
    
    function StepONE() {
      document.getElementById('stepslog').innerHTML += '<hr>Step ONE';
      for (i = 1; i < 700; i++) {
        var abc = document.getElementById("count");
        abc.innerHTML += '<br>' + i;
      }
      return 'Return from ONE';
    }
    
    function StepTWO() {
      document.getElementById('stepslog').innerHTML += '<hr>Step TWO';
      return 'Return from TWO';
    }
    
    function StepTHREE() {
      document.getElementById('stepslog').innerHTML += '<hr>Step THREE';
    }
    <div id="stepslog"></div>
    <div id="count"></div>
    <button onclick="Steps()">Start </button>
        2
  •  1
  •   Michael Geary    8 年前

    你把这条路弄得太复杂了。

    如果要依次运行三个函数,只需按顺序编写调用:

    stepOne();
    stepTwo();
    stepThree();
    

    这将依次调用列出的三个函数。在调用下一个函数之前,每个函数都将完全完成其执行。

    这是运行JavaScript函数的正常方式。你不需要回电,也不需要承诺,或者其他任何东西。只需调用函数即可。

    关于更新,如果需要从一个函数返回一个值,然后将该值传递给另一个函数,只需执行以下操作:

    let valOne = stepOne();
    let valTwo = stepTwo( valOne );
    stepThree( valTwo );
    

    现在,如果您正在处理服务器请求或任何其他异步请求,则情况就不同了。但你的问题中没有任何东西表明这一点。顺序执行是JavaScript的正常工作方式,所以除非您需要其他东西,否则请使用它。