Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个可写流是否有一个功能更强大的实现,它使用RxJS,在处理之前等待承诺的解析?_Javascript_Node.js_Design Patterns_Rxjs_Stream - Fatal编程技术网

Javascript 这个可写流是否有一个功能更强大的实现,它使用RxJS,在处理之前等待承诺的解析?

Javascript 这个可写流是否有一个功能更强大的实现,它使用RxJS,在处理之前等待承诺的解析?,javascript,node.js,design-patterns,rxjs,stream,Javascript,Node.js,Design Patterns,Rxjs,Stream,我已经在岩石下生活了几年,所以我还没有接触过RxJS,我很好奇它是如何处理下面这种情况的 这个用例是这样一个场景:我打开一个连接并等待它建立,然后再处理任何传入的块 const {Readable, Writable} = require('stream') class DelayedWritable extends Writable { constructor(options = {}){ options.objectMode = true; super(options)

我已经在岩石下生活了几年,所以我还没有接触过RxJS,我很好奇它是如何处理下面这种情况的

这个用例是这样一个场景:我打开一个连接并等待它建立,然后再处理任何传入的块

const {Readable, Writable} = require('stream')

class DelayedWritable extends Writable {
  constructor(options = {}){
    options.objectMode = true;
    super(options);

    this.promise = new Promise((resolve, reject) => {
      console.log('...waiting...')
      setTimeout( function() {
        console.log('...promise resolved...')
        resolve(/* with client */)
      }, 2000) 
    }) 
  }
  _write = function(chunk, encoding, done){
    var output = `_write : ${chunk}`
    console.time(output)
    this.promise.then((client) => {
      console.timeEnd(output)
      done() 
    });
  }
  _final = function(done){
    console.log('_final')
  }

}

var readable = Readable.from(['one', 'two', 'three'])
var test = new DelayedWritable();
readable.pipe(test)
似乎功能性更强的方法才是最佳选择。RxJS似乎还提供了很多开箱即用的流量控制,这很好


谢谢

如果您已经熟悉Node.js streams,我认为您不会发现在RxJs中很难掌握相同的概念:随时间推移收集数据

这个用例是这样一个场景:我打开一个连接并等待它建立,然后再处理任何传入的块

这可以转化为RxJs,如下所示:

间隔(500)
.烟斗(
以(5)为例,
bufferTime(2000),//建立连接需要2秒
)
.subscribe(console.log)
$
后缀用于表示
src$
不是一个简单的变量,它是一个可观察的(随时间发出值)

interval
将根据指定的时间间隔发出值,并将收集发出的值,直到指定的
ms
通过。发生这种情况时,将以数组的形式获取收集的值

我特别喜欢RxJs的地方是,它带有许多内置操作符,允许您操作传入的数据

const src$=from(['one','two','tree']);
src$
.烟斗(
过滤器(v=>v!=='one'),
map(v=>v.toUpperCase()),
toArray()//一旦源完成,就将数组中的值分组
)
.subscribe(val=>console.log(val));


将承诺转换为可观察的承诺非常简单:

from(promise.subscribe())

上面的例子可能看起来微不足道,我同意。 你将不可避免地遇到更复杂的情况,了解这些情况会很方便