V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
TomVista
V2EX  ›  问与答

js 修改 dom,最终在队列尾部渲染,如何解决

  •  
  •   TomVista · 2019-05-22 12:40:11 +08:00 · 1173 次点击
    这是一个创建于 1799 天前的主题,其中的信息可能已经有所发展或是发生改变。

    伪代码

    {
    	showLoading();
        doSomething();
        //在这里 loading 动画才会被渲染出来
        //closeLoading();如果有这一句,loading 动画都不会渲染.....
    }
    
    

    这个需求怎么解决,setTimeout 可以吗? 还有别的办法吗?

    我先去午睡,醒了没有答案,就打死在座的诸位.

    第 1 条附言  ·  2019-05-22 15:38:34 +08:00
    项目不支持 es6/7,我用 settimeout 解决了.代码丑爆了.
    10 条回复    2019-05-22 15:28:03 +08:00
    fishlium
        1
    fishlium  
       2019-05-22 14:23:56 +08:00
    我猜 doSomething 是异步的,去看看 promise 吧
    TomVista
        2
    TomVista  
    OP
       2019-05-22 14:28:33 +08:00
    @fishlium doSomething 不是异步,是我自己写的,但支持异步

    改成异步,用 promise 链式调用是这个意思吗?我先去试试.
    Phuasheng
        3
    Phuasheng  
       2019-05-22 14:32:31 +08:00
    这锅甩的,让我猝不及防
    toma77
        4
    toma77  
       2019-05-22 14:33:55 +08:00
    await...
    TomVista
        5
    TomVista  
    OP
       2019-05-22 14:36:28 +08:00
    @Phuasheng 没明白,(藏好手上的锤子,弱弱的问)
    fishlium
        6
    fishlium  
       2019-05-22 14:47:54 +08:00
    @TomVista 用链式调用或者 awiat 都可以
    DOLLOR
        7
    DOLLOR  
       2019-05-22 14:54:03 +08:00
    出于性能考虑,浏览器的 UI 渲染都发生在 task 结尾。
    所以,你这段代码,```showLoading()```和```closeLoading()```是在同一个 task 里的,还没来得及渲染,就随着 task 的结束而消失了。
    如果你想让```showLoading()```在```doSomething()```之前完成渲染,那你应该把```doSomething()```放在新的 task 中。
    123s
        8
    123s  
       2019-05-22 14:55:27 +08:00
    不知道说什么
    TomVista
        9
    TomVista  
    OP
       2019-05-22 15:26:04 +08:00
    @fishlium @DOLLOR ok,我去改代码

    @123s 搁半年前,我也懵逼,学呗,骚年
    TomVista
        10
    TomVista  
    OP
       2019-05-22 15:28:03 +08:00
    @123s 我好像理解错你的意思了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1394 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:49 · PVG 07:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.