Tag: 协程

Node.jsstream可以作为协程?

有没有办法使Node.jsstream作为协同程序。 例如斐波那契数字stream。 fibonacci.on('data', cb); //The callback (cb) is like function cb(data) { //something done with data here … } 期望 function* fibonacciGenerator() { fibonacci.on('data', cb); //Don't know what has to be done further… }; var fibGen = fibonacciGenerator(); fibGen.next().value(cb); fibGen.next().value(cb); fibGen.next().value(cb); . . . 从发生器获取所需的数字。 这里斐波那契数列仅仅是一个例子,实际上这个数据stream可以是任何文件,mongodb查询结果等等。 也许这样的事情 将“stream.on”函数作为生成器。 将产量放在callback函数中。 获取生成器对象。 接下来调用并获取stream中的下一个值。 如果是的话,至less是可能的,如果不是,为什么? 也许一个愚蠢的问题:)

MongoDB – 两个更新顺序相互重叠

我们正在为我们的系统build立规模计算机制。 为了计算大小,我们从第一个primefaces操作findAndModify开始寻找对象并为其添加locking属性(为了防止另一个计算对象与它进行交互并等待结束,因为我们可能有许多并行计算 – 在这种情况下,其他人应该被推迟),然后我们计算特定属性的大小,并在此操作之后 – 我们将元数据添加到对象并删除locking。 但是,有时候,当我们有很多单个对象的计算(特别是当我们并行计算大量对象的时候),有些更新不会被执行。 计算过程中的_size元数据如下所示: { _lockedAt: SomeDate, _transactionId: 'abc' } 计算后应该是这样的: { somePropertySize: 123, anotherPropertySize: 1245, (…) _total: 131431523 // Some number // Notice that both _lockedAt and _transactionId should be missing } 这就是我们的更新stream程: return Promise.coroutine(function * () { yield object.findOneAndUpdate({ '_id': gemId, '_size._lockedAt': { $exists: false } }, { $set: […]

node.js:如何从C ++模块中产生?

背景 :v8支持yield(旧消息,我知道),这是非常好的做的JavaScript代码callback,如在node.js中使用(请参阅https://wingolog.org/archives/2013/05/ 08 / generators-in-v8 ) 这个问题 :由于一个JavaScript协程可以调用C ++代码(通过一个模块),被调用的C ++如何执行一个yield操作呢? 为了显示: // javascript function* values() { yield 27; mycppmodule.someFunction(); } // c++ mycppmodule::someFunction() { __somehow_yield( 28 ); // how can we make this happen? } // user of the code above var o = values(); o.next(); // returns 27 – came from javascript above o.next(); […]

Promise.coroutine如何支持生成器作为yieldable值?

Promise.coroutine支持Promise作为可产生的值types。 通过addYieldHandler(function handler) , Promise.coroutine也可以支持任何只能重新返回结果的types。 但我怎么能写一个yieldHandler,可以像co一样处理一个generatortypes呢?