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

2019-05-22 12:40:11 +08:00
 TomVista

伪代码

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

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

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

1244 次点击
所在节点    问与答
10 条回复
fishlium
2019-05-22 14:23:56 +08:00
我猜 doSomething 是异步的,去看看 promise 吧
TomVista
2019-05-22 14:28:33 +08:00
@fishlium doSomething 不是异步,是我自己写的,但支持异步

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

@123s 搁半年前,我也懵逼,学呗,骚年
TomVista
2019-05-22 15:28:03 +08:00
@123s 我好像理解错你的意思了

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

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

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

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

© 2021 V2EX