Javascript 这个可写流是否有一个功能更强大的实现,它使用RxJS,在处理之前等待承诺的解析?
我已经在岩石下生活了几年,所以我还没有接触过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)
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())
上面的例子可能看起来微不足道,我同意。 你将不可避免地遇到更复杂的情况,了解这些情况会很方便