V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
y051313
V2EX  ›  JavaScript

请教一个嵌套循环的写法

  •  
  •   y051313 · 2018-08-10 23:29:59 +08:00 · 3066 次点击
    这是一个创建于 2296 天前的主题,其中的信息可能已经有所发展或是发生改变。
    类似下面这种,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>

    谢谢
    7 条回复    2018-08-14 11:49:26 +08:00
    Sparetire
        1
    Sparetire  
       2018-08-11 01:05:03 +08:00 via Android
    async/await
    qshu
        2
    qshu  
       2018-08-11 08:47:11 +08:00
    var[n].write
    947211232
        3
    947211232  
       2018-08-11 08:50:29 +08:00
    递归
    SakuraKuma
        4
    SakuraKuma  
       2018-08-11 09:40:18 +08:00   ❤️ 1
    let
    vars = [var1, var2, var3, etc...],
    latency = 1e3,
    run = () => {
    let cVar = vars.shift();
    cVar.write({
    onComplete: setTimeout(run, latency)
    })
    };

    setTimeout(run, latency);

    大概这种感觉??
    y051313
        5
    y051313  
    OP
       2018-08-12 15:49:59 +08:00
    @SakuraKuma 多谢
    e8c47a0d
        6
    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
        7
    e8c47a0d  
       2018-08-14 11:49:26 +08:00
    v = {
    async write () {
    try {
    // 在这里做处理
    return true // 这个 return 可以缺省
    }
    catch (e) {
    throw e
    }
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1653 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:49 · PVG 00:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.