如何等待递归循环完成并显示消息?

How to wait for the recursive loop to finish and display the message?

我是 运行 一个带有 setTimeout 的递归函数,我注意到 javascript 直接通过 wait() 函数而不等待它完成。它直接通过并让 wait() 方法自行工作。

wait(100, 30)

function wait(time, limit) {
    console.log('value >> ' + limit)
    if (limit < 0) return 'success'
    setTimeout(function () {
        wait(time, --limit)
    }, time)
}

console.log('hi')

请注意,当 运行 脚本时,我的“hi”消息位于顶部,因为它直接通过而不等待递归循环。我的“hi”消息应该在末尾。

谁能帮我在 运行 整个循环结束后留下你好消息?

你可以交出等待结束时调用的函数

function wait(time, limit, fn) {
    console.log('value >> ' + limit)
    if (limit < 0) return fn();
    setTimeout(function () {
        wait(time, --limit, fn);
    }, time)
}

function sayHi() { console.log('hi'); }

wait(100, 30, sayHi);

你也可以直接return你想要的信息:

wait(100, 30);

function wait(time, limit) {
  console.log("value >> " + limit);
  if (limit < 0) return console.log("hi");
  setTimeout(function () {
    wait(time, --limit);
  }, time);
}

除了 Nina 的方法外,还适用于无法像 Nina 演示的那样轻松实现回调的用例的示例代码,人们可能会对其使用抽象,对于 JavaScript 是 Promises.

在这里,不是在记录之前延迟 30 次 100 毫秒,而是将 wait 实现为 promise,它在 3 秒后解决,并提供额外的日志记录 thenable ...

const wait = new Promise(resolve => setTimeout(resolve, 3000));

wait.then(() => console.log('hi'));

console.log({ wait: String(wait) });
.as-console-wrapper { min-height: 100%!important; top: 0; }