zoukankan      html  css  js  c++  java
  • nodejs 事件循环 试题思考

    这篇文章没有做出很好的解释, 我只是想记录一下关于事件循环的示例(可以思考思考):

    开始之前我们先看一下 Promise

    语法:

    new Promise(executor)
    

    executor 中的代码的是同步执行的

    详见: Promise() 构造器


    示例一:

    给出两段代码思考打印顺序:

    ;(async () => {
      await console.log(1)
      await console.log(2)
      await console.log(3)
      await console.log(4)
    })()
    
    ;(async () => {
      await console.log('a')
      await console.log('b')
      await console.log('c')
      await console.log('d')
    })()
    

    或者这样:

    new Promise((resolve) => {
      resolve()
    }).then(() => {
      console.log(1)
    }).then(() => {
      console.log(2)
    }).then(() => {
      console.log(3)
    }).then(() => {
      console.log(4)
    })
    
    new Promise((resolve) => {
      resolve()
    }).then(() => {
      console.log('a')
    }).then(() => {
      console.log('b')
    }).then(() => {
      console.log('c')
    }).then(() => {
      console.log('d')
    })
    

    打印结果:

    1
    a
    2
    b
    3
    c
    4
    d
    

    示例二:

    再来一个 node 中文网 的例子:

    const bar = () => console.log('bar')
    const baz = () => console.log('baz')
    const foo = () => {
      console.log('foo')
      setTimeout(bar, 0)
      new Promise((resolve, reject) => {
        // 这个函数里面的代码是同步执行的
        resolve('应该在 baz 之后、bar 之前')
        console.log('foo 之后')
      }).then(resolve => console.log(resolve))
      baz()
    }
    
    foo()
    

    打印结果:

    foo
    foo 之后
    baz
    应该在 baz 之后、bar 之前
    bar
    

    转到 node中文网 查看事件循环教程 传送门

    总结

    node.js 事件循环 重要摘取

    ES6 作业队列
    ECMAScript 2015 引入了作业队列的概念,Promise 使用了该队列(也在 ES6/ES2015 中引入)。 这种方式会尽快地执行异步函数的结果,而不是放在调用堆栈的末尾。
    
    在当前函数结束之前 resolve 的 Promise 会在当前函数之后被立即执行。
    
    有个游乐园中过山车的比喻很好:消息队列将你排在队列的后面(在所有其他人的后面),你不得不等待你的回合,而工作队列则是快速通道票,这样你就可以在完成上一次乘车后立即乘坐另一趟车。
    
    这是 Promise(以及基于 promise 构建的 async/await)与通过 setTimeout() 或其他平台 API 的普通的旧异步函数之间的巨大区别
    

    文献:

    MDN 使用 Promise

  • 相关阅读:
    Linux用户配置文件、口令配置文件、组配置文件
    Linux忘记Root密码怎么找回
    Linux运行级别及解释
    Maven获取resources的文件路径、读取resources的文件
    常见状态码100、200、300、400、500等
    JVM内存模型
    tcl使用小结
    MFQ&&PPDCS
    总结下自己在工作中有关联的TCP/IP协议
    二层交换机和三层交换机
  • 原文地址:https://www.cnblogs.com/taohuaya/p/14679945.html
Copyright © 2011-2022 走看看