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

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

  •  
  •   TomVista · 33 天前 · 526 次点击
    这是一个创建于 33 天前的主题,其中的信息可能已经有所发展或是发生改变。

    伪代码

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

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

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

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

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

    @123s 搁半年前,我也懵逼,学呗,骚年
        10
    TomVista   33 天前
    @123s 我好像理解错你的意思了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4343 人在线   最高记录 5043   ·   Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 02:02 · PVG 10:02 · LAX 19:02 · JFK 22:02
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1