请教一个嵌套循环的写法

2018-08-10 23:29:59 +08:00
 y051313
类似下面这种,varN 的数目不固定,应该怎样写?

<code>
var1.write({
onComplete: function() {
setTimeout(function() {
var2.write({
onComplete: function() {
setTimeout(function() {
var3.write({
onComplete: function() {
setTimeout(function() {
var4.write();
}, 1000);
}
});
}, 1000);
}
});
}, 1000);
}
});
</code>

谢谢
3090 次点击
所在节点    JavaScript
7 条回复
Sparetire
2018-08-11 01:05:03 +08:00
async/await
qshu
2018-08-11 08:47:11 +08:00
var[n].write
947211232
2018-08-11 08:50:29 +08:00
递归
SakuraKuma
2018-08-11 09:40:18 +08:00
let
vars = [var1, var2, var3, etc...],
latency = 1e3,
run = () => {
let cVar = vars.shift();
cVar.write({
onComplete: setTimeout(run, latency)
})
};

setTimeout(run, latency);

大概这种感觉??
y051313
2018-08-12 15:49:59 +08:00
@SakuraKuma 多谢
e8c47a0d
2018-08-14 09:48:28 +08:00
let wait = duration => new Promise(resolve => setTimeout(resolve, duration))
let vs = [{}, {}, {}, ...] // 把这里的 {} 换成有 write 的对象

async function loop () {
for (let i = 0; i < vs.length; i++) { // 不要用 forEach
let v = vs[i]
await v.write()
await wait(1000)
}
}
loop()
e8c47a0d
2018-08-14 11:49:26 +08:00
v = {
async write () {
try {
// 在这里做处理
return true // 这个 return 可以缺省
}
catch (e) {
throw e
}
}
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/478756

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX