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

请教一个嵌套循环的写法

  •  
  •   y051313 · 121 天前 · 965 次点击
    这是一个创建于 121 天前的主题,其中的信息可能已经有所发展或是发生改变。
    类似下面这种,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
        1
    Sparetire   121 天前 via Android
    async/await
        2
    qshu   121 天前
    var[n].write
        3
    947211232   121 天前
    递归
        4
    SakuraKuma   121 天前   ♥ 1
    let
    vars = [var1, var2, var3, etc...],
    latency = 1e3,
    run = () => {
    let cVar = vars.shift();
    cVar.write({
    onComplete: setTimeout(run, latency)
    })
    };

    setTimeout(run, latency);

    大概这种感觉??
        5
    y051313   119 天前
    @SakuraKuma 多谢
        6
    e8c47a0d   118 天前
    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()
        7
    e8c47a0d   117 天前
    v = {
    async write () {
    try {
    // 在这里做处理
    return true // 这个 return 可以缺省
    }
    catch (e) {
    throw e
    }
    }
    }
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3660 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 35ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1