V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
shuding
V2EX  ›  JavaScript

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

  •  1
     
  •   shuding · 2016-06-09 20:38:40 +08:00 · 3661 次点击
    这是一个创建于 3095 天前的主题,其中的信息可能已经有所发展或是发生改变。

    其实就是常规的 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

    11 条回复    2016-06-10 11:31:21 +08:00
    breeswish
        1
    breeswish  
       2016-06-09 20:45:25 +08:00   ❤️ 2
    都上 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
        2
    chairuosen  
       2016-06-09 20:54:12 +08:00   ❤️ 5
    function sleep(delay){
    alert( delay + '秒钟之后点一下确定' );
    }
    kzaemrio
        3
    kzaemrio  
       2016-06-09 20:57:05 +08:00
    @chairuosen 棒棒棒
    wujunze
        4
    wujunze  
       2016-06-09 21:01:42 +08:00
    这是什么飞机? 意义何在?
    lhbc
        5
    lhbc  
       2016-06-09 21:06:01 +08:00 via Android
    @wujunze 为后续性能优化打下坚实基础
    wujunze
        6
    wujunze  
       2016-06-09 21:13:23 +08:00
    @lhbc 很久木有写 JS 了 JS 快忘光了
    zhuangzhuang1988
        7
    zhuangzhuang1988  
       2016-06-09 21:17:03 +08:00   ❤️ 1
    @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
        8
    zmj1316  
       2016-06-09 22:29:10 +08:00   ❤️ 2
    js 的 异步 有几种写法?
    shuding
        9
    shuding  
    OP
       2016-06-09 22:31:49 +08:00
    @breeswish 还是 async/await 好看!坐等 native support …
    @zhuangzhuang1988 wow 感谢!没接触过 F#,在看官网 sample 中,赞!!
    jasonliao
        10
    jasonliao  
       2016-06-09 22:32:51 +08:00
    @chairuosen 今日最佳
    bramblex
        11
    bramblex  
       2016-06-10 11:31:21 +08:00
    我自己造了一个编译到 JavaScript 的语言 Smooth , https://github.com/bramblex/Smooth

    这种问题在 Smooth 里面实现简直不能太简单了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1105 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.