zoukankan      html  css  js  c++  java
  • deAsync.js 真正让异步变同步

    卧槽!牛逼!IMBA!这就是我第一次看到这个库的心情。迫不及待的想要分享给大伙儿。

    同步代码

    众所周知,JS 是一门‘单线程’语言,一旦开始,就会从始至终、从上到下的执行完毕,非常的专一。

    console.log(1)
    console.log(2)
    console.log(3)
    
    // 1
    // 2
    // 3
    

    异步代码

    然而,老实人也有变心的一天。回调函数、Promise 让 JS 拥有了异步处理的能力。

    console.log(1)
    Promise.resolve()
      .then(() => console.log(2))
    
    console.log(3)
    
    // 1
    // 3
    // 2
    

    当然,异步依然改变不了它‘单线程’的初心,这一切都是 eventLoop 的功劳。

    有时候突发奇想,如何在不改变代码顺序的情况下,使之输出 1、2、3 呢?首先必然是await,然而await会向上传染,如果别人也使用了这个模块,就糟糕了。

    或者像下面这样?

    let isReturn = false
    console.log(1)
    Promise.resolve()
      .then(() => {
        isReturn = true
        console.log(2)
      })
    
    while(!isReturn) {
    
    }
    
    console.log(3)
    

    好嘛,直接卡死!

    deAsync.js

    var deasync = require('deasync');
    let isReturn = false
    console.log(1)
    Promise.resolve()
      .then(() => {
        isReturn = true
        console.log(2)
      })
    
    while(!isReturn) {
      deasync.runLoopOnce()
    }
    
    console.log(3)
    // 1
    // 2
    // 3
    

    关键就是deasync.runLoopOnce(),它会强制 node 运行一次事件循环。IMBA!

  • 相关阅读:
    前端之JavaScript内容
    前端之CSS内容
    前端之HTML内容
    表单提交中的input、button、submit的区别
    PostgreSQL
    PostgreSQL
    PostgreSQL
    JIRA中的标记语言的语法参考
    Markdown
    Linux
  • 原文地址:https://www.cnblogs.com/fayin/p/15232333.html
Copyright © 2011-2022 走看看