我正在使用 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”訊息應該在末尾。
任何人都可以在運行所有回圈后幫我在最后留下 hi 訊息嗎?
uj5u.com熱心網友回復:
您可以切換在等待結束時呼叫的函式。
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);
uj5u.com熱心網友回復:
你也可以簡單地回傳你想要的訊息:
wait(100, 30);
function wait(time, limit) {
console.log("value >> " limit);
if (limit < 0) return console.log("hi");
setTimeout(function () {
wait(time, --limit);
}, time);
}
uj5u.com熱心網友回復:
除了Nina的方法以及不能像Nina的示例代碼演示的那樣容易實作回呼的用例之外,人們可能會使用它的抽象,對于 JavaScript 是Promises。
在這里,不是 30 次延遲 100 毫秒直到日志記錄,而是將實作wait為承諾,該承諾在 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; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/389008.html
標籤:javascript 递归 设置超时
