【发布时间】:2022-11-22 19:03:28
【问题描述】:
我在 Javascript 中有一个简单的 setTimeout 函数,它只允许我指定延迟任何操作的时间量,然后只是一个用于链接的回调
function delay(item, callback) {
return new Promise(function(response, reject) {
setTimeout(function() {
console.log(item.message);
response(callback());
}, item.time);
});
}
我可以在嵌套回调中很好地使用它,但它开始变得非常乏味和丑陋,无法用于更长的链
function delayChain() {
const items = [
{message:"Waited 01 sec", time:1000},
{message:"Waited 02 sec", time:2000},
{message:"Waited 04 sec", time:4000},
{message:"Waited 03 sec", time:3000}
];
delay(items[0], function() {
delay(items[1], function() {
delay(items[2], function() {
delay(items[3], function() {
console.log("Done Waiting");
});
});
});
});
}
我想知道是否有可能以递归的方式做类似的事情
更新
似乎可以通过像这样使用 async/await 来完成类似的事情而不需要回调
async function delayChainAsync() {
const items = [
{message:"Waited 01 sec", time:1000},
{message:"Waited 02 sec", time:2000},
{message:"Waited 04 sec", time:4000},
{message:"Waited 03 sec", time:3000}
];
for(let item of items) {
await delay(item, function() {});
}
console.log("Done Waiting");
}
但我希望仍然像在原始延迟函数中那样使用回调链
【问题讨论】:
-
This answer 副本看起来像你想要的
-
这个答案很接近,但它似乎没有使用回调,我只是更新我的问题以更加强调回调而不是异步/等待
-
使用 Promise 可以吗?或者您只想要一个带有普通回调的解决方案?
-
Promise 主要只是为了确保出于测试目的而延迟回调,但回调是 mvp
-
我重新打开这个问题,因为已经澄清它主要是关于回调而不是 promises/async/await(重复的答案指的是)
标签: javascript recursion promise callback settimeout