首页 > 解决方案 > Sequential programming with setTimeout in JavaScript?

问题描述

I have tried using setTimeout but I added pizzaTask method, the setTimeout doesn't seem to work. Yes, I do not want any async or promises here.

function preparePizza(n) {
  console.log("Finish preparing pizza " + n);
  console.log("Start baking pizza " + n);
  setTimeout(bakePizza, 10000);
}

function bakePizza() {
  console.log("Finish baking pizza");
}

function makePizza(n) {
  console.log("Start preparing pizza " + n);
  setTimeout(preparePizza(n), 5000);
}

function pizzaTask() {
  for (let x = 1; x <= 10; x++) {
    makePizza(x);
  }

  console.log("Read to take new order ...");
}

pizzaTask();

标签: javascript

解决方案


问题是你调用的方式preparePizza(n),这调用了返回的函数undefined。您需要传递一个函数并在此函数中调用它作为preparePizza参数n。下面的解决方案。

  function preparePizza(n) {
    console.log("Finish preparing pizza " + n);
    console.log("Start baking pizza " + n);
    setTimeout(bakePizza, 10000);
  }

  function bakePizza() {
    console.log("Finish baking pizza");
  }

  function makePizza(n) {
    console.log("Start preparing pizza " + n);
    setTimeout(function() {
      preparePizza(n)
    }, 5000);
  }

  function pizzaTask() {
    for (let x = 1; x <= 10; x++) {
      makePizza(x);
    }

    console.log("Read to take new order ...");
   }
  
   pizzaTask();


推荐阅读