开发者问题收集

在 Javascript 中从 setTimeout 内的函数获取返回的项目

2021-09-19
466

因此,我需要在 JavaScript 中对循环内的函数进行一点延迟,该函数每 500 毫秒调用一次:

function myFunc(num) {
    return num++;
}

var theNum = 0;

while (theNum != 10) {
    theNum = setTimeout(myFunc(theNum), 500);
}
console.log("All done");

但是, All done 永远不会被记录下来。

1个回答
  1. 您正在立即调用该函数。您需要将函数 引用 传递给 setTimeout

  2. 并且由于该问题,您还创建了一个无限循环。

  3. 即使您更正了这个问题,“全部完成”仍会在任何超时完成之前首先记录。

因此,您需要重新考虑这种方法。将超时放在函数中,如果 theNum 小于10,则使用递增的数字再次调用该函数( setTimeout 允许您在延迟后传递参数)。当计数达到 10 时记录“全部完成”。

function myFunc(num) {
  return `Number: ${num}`;
}

function loop(theNum = 0) {
  if (theNum < 10) {
    console.log(myFunc(theNum));
    setTimeout(loop, 500, ++theNum);
  } else {
    console.log("All done");
  }
}

loop();
Andy
2021-09-19