关于 async function 的设计哲学:如何评价 await 一个 resolved 的 promise 会使上下文拆成两个 tick ?

2017-02-13 21:05:54 +08:00
 dou4cc
4260 次点击
所在节点    JavaScript
49 条回复
noli
2017-02-13 21:17:23 +08:00
要求进一步详细信息: 能不能添加一点代码示例来表达情况?
dou4cc
2017-02-13 21:24:00 +08:00
let s = 0;
(async () => {
await Promise.resolve();
++s; //2
})();
++s; //1
dou4cc
2017-02-13 21:25:16 +08:00
我希望是这样:
let s = 0;
(async () => {
await Promise.resolve();
++s; //1
})();
++s; //2
morethansean
2017-02-13 21:27:56 +08:00
... 楼主, seriously?
dou4cc
2017-02-13 21:30:02 +08:00
?
dou4cc
2017-02-13 21:30:17 +08:00
dou4cc
2017-02-13 21:30:34 +08:00
mooncakejs
2017-02-13 21:36:27 +08:00
你需要一个全局 async
sox
2017-02-13 21:50:37 +08:00
什么哲学,本来就该这样。。
xcodebuild
2017-02-13 22:12:57 +08:00
你的期望就不该这么写。。
zkd8907
2017-02-13 22:20:01 +08:00
竟然想顺序执行,为啥还要用 await/async 。。。没明白你想表达啥。
XDDD
2017-02-14 00:14:34 +08:00
async 的目的就是拆成两个 tick ,你的期望叫做 sync
FrankFang128
2017-02-14 00:16:57 +08:00
你的期望是错的……
dou4cc
2017-02-14 06:49:50 +08:00
@sox @XDDD 我只是举个栗子——你有没有想过既然已经 resolved 了,干嘛还要拆 tick ,过多的 tick 影响性能
dou4cc
2017-02-14 06:54:14 +08:00
在某些场合我会对状态转移函数作缓冲,如果一个 tick 内又转移回来了便不触发状态改变的事件,上面的设计影响了我的缓存命中
Sparetire
2017-02-14 07:59:25 +08:00
异步是会传染的。。如果你希望全部按同步逻辑来写,那你应该用 async 包住整个逻辑
noli
2017-02-14 08:45:09 +08:00
@doucc

你期望的结果,跟你认为实际会发生的结果,在我认为的实际里面,实际上都有可能发生。
当然,一个异步结果很大可能总是会比下一个同步结果来得慢,但也并不是完全不可能得到相反的快慢结果。

所以你实际情景中遇到的问题是什么,请不要用自己的抽象来说明了,请直接一点吧。
dou4cc
2017-02-14 09:06:05 +08:00
@noli 什么叫很大可能? js 是单线程的,各语句的执行先后是确定的
dou4cc
2017-02-14 09:08:15 +08:00
@noli 我的缓存机制是这样的,每过一个 tick 就回收一些缓存,所以两次操作间隔的 tick 越少能命中的缓存就越多
dou4cc
2017-02-14 09:09:30 +08:00
我非常不理解 await 对 tick 的极大浪费

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

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

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

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

© 2021 V2EX