首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习节点#9杂耍异步,官方解决方案会中断吗?

学习节点#9杂耍异步,官方解决方案会中断吗?
EN

Stack Overflow用户
提问于 2015-07-11 04:34:48
回答 1查看 165关注 0票数 1

所以我现在正在学习node.js,以前做过一些多任务处理,我的概念是异步和多任务有许多相似的相似之处,这就引出了我的问题。

这一问题的官方解决办法是:

代码语言:javascript
复制
  var http = require('http')
    var bl = require('bl')
    var results = []
    var count = 0

    function printResults () {
      for (var i = 0; i < 3; i++)
        console.log(results[i])
    }

    function httpGet (index) {
      http.get(process.argv[2 + index], function (response) {
        response.pipe(bl(function (err, data) {
          if (err)
            return console.error(err)

          results[index] = data.toString()
          //AREA OF INTEREST START
          count++

          if (count == 3)
            printResults()
          //AREA OF INTEREST END
        }))
      })
    }

    for (var i = 0; i < 3; i++)
      httpGet(i)

注意“感兴趣区域”评论中的部分。难道不可能在这里发生类似于竞赛条件的事情,导致多次调用printResults函数吗?

例如,所有三个“结束”回调同时执行,每个回调都一个接一个地执行count++ (因此count == 3检查还没有发生在任何回调上,但计数增加了三次),现在每个回调都将检查count == 3条件,这对于所有调用printResults三次都是正确的。

这是可能的吗?官方的解决方案是否有一些缺陷?还是我误解了一些概念?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-11 04:37:19

不,比赛条件不是那个代码的问题。回调在一个线程中运行。他们不会同时运行。他们将以串联的方式运行。

有关回调是如何排队的以及代码中为什么没有竞争条件的更多信息,您可以选择查看菲利普·罗伯茨()的一段很棒的视频名为“事件循环到底是什么?”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31353448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档