JavaScript 一行简易实现 `sleep(1)`

2016-06-09 20:38:40 +08:00
 shuding

其实就是常规的 generator 用法,也是 co , koa 的基本原理。
……我折腾了一个 57 字符的 简易 实现。

在 Console 里运行一发试试吧!

var d=(f,t=f(),r=t.next())=>r.done||setTimeout(d,r.value,f,t); // <- source code
d(function *() {                                               // <- wrapper
                                                               // <- magic
  console.log('foo'); // output 'foo'
  yield 1000;         // delay 1 sec
  console.log('bar'); // output 'bar'
  yield 1000;         // delay 1 sec
  console.log('baz'); // output 'baz'

});

详细: https://github.com/quietshu/delay

3499 次点击
所在节点    JavaScript
11 条回复
breeswish
2016-06-09 20:45:25 +08:00
都上 generator 了,何不 async/await 走起 :-)

const sleep = (delay) => new Promise(resolve => setTimeout(resolve, delay));

console.log('foo');
await sleep(1000);
console.log('bar');
await sleep(1000);
console.log('baz');
chairuosen
2016-06-09 20:54:12 +08:00
function sleep(delay){
alert( delay + '秒钟之后点一下确定' );
}
kzaemrio
2016-06-09 20:57:05 +08:00
@chairuosen 棒棒棒
wujunze
2016-06-09 21:01:42 +08:00
这是什么飞机? 意义何在?
lhbc
2016-06-09 21:06:01 +08:00
@wujunze 为后续性能优化打下坚实基础
wujunze
2016-06-09 21:13:23 +08:00
@lhbc 很久木有写 JS 了 JS 快忘光了
zhuangzhuang1988
2016-06-09 21:17:03 +08:00
@breeswish 都 async/await 为何不 async computation expressions 走起 :-)

async {
println "foo"
do! Async.Sleep 10000
println "bar"
do! Async.Sleep 10000
.....
}

需要使用 http://fsprojects.github.io/Fable/
zmj1316
2016-06-09 22:29:10 +08:00
js 的 异步 有几种写法?
shuding
2016-06-09 22:31:49 +08:00
@breeswish 还是 async/await 好看!坐等 native support …
@zhuangzhuang1988 wow 感谢!没接触过 F#,在看官网 sample 中,赞!!
jasonliao
2016-06-09 22:32:51 +08:00
@chairuosen 今日最佳
bramblex
2016-06-10 11:31:21 +08:00
我自己造了一个编译到 JavaScript 的语言 Smooth , https://github.com/bramblex/Smooth

这种问题在 Smooth 里面实现简直不能太简单了

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

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

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

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

© 2021 V2EX