如何等待递归循环完成并显示消息?
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 是 Promise
s.
在这里,不是在记录之前延迟 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; }
我是 运行 一个带有 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 是 Promise
s.
在这里,不是在记录之前延迟 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; }