成都网站建设设计

将想法与焦点和您一起共享

Node.jsStreamondata触发时机与顺序的探索-创新互联

上次写Stream pipe细节时,在源码中发现一段无用逻辑,由此引发了对Stream data事件触发时机与顺序的探索。

成都创新互联公司服务项目包括云浮网站建设、云浮网站制作、云浮网页制作以及云浮网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,云浮网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到云浮省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

无用逻辑

当时研究pipe细节是基于Node.js v8.11.1的源码,其中针对上游的ondata事件处理有如下一段代码:

// If the user pushes more data while we're writing to dest then we'll end up
// in ondata again. However, we only want to increase awaitDrain once because
// dest will only emit one 'drain' event for the multiple writes.
// => Introduce a guard on increasing awaitDrain.
var increasedAwaitDrain = false;
src.on('data', ondata);
function ondata(chunk) {
  debug('ondata');
  increasedAwaitDrain = false;
  var ret = dest.write(chunk);
  if (false === ret && !increasedAwaitDrain) {
    if (((state.pipesCount === 1 && state.pipes === dest) ||
        (state.pipesCount > 1 && state.pipes.indexOf(dest) !== -1)) &&
      !cleanedUp) {
      debug('false write response, pause', src._readableState.awaitDrain);
      src._readableState.awaitDrain++;
      increasedAwaitDrain = true;
    }
    src.pause();
  }
}

文章题目:Node.jsStreamondata触发时机与顺序的探索-创新互联
浏览地址:http://chengdu.cdxwcx.cn/article/ceipjo.html