我正在玩两个优秀的图书馆:js-csp和transducers.js试图围绕它们(以及发电机)。
我认为我对使用频道有了一个很好的理解,但是当我决定将传感器(我还不太了解它们)应用到它们时,我似乎无法使它工作。甚至这些例子都不适合我。
我使用的特定的transducers.js文件是this one,而对于js-csp,我编译了自己的(对于许多其他实验,它一直工作正常)。基本上我用这个编译了一个文件:
import csp from 'js-csp';
window.csp = csp;
使用browserify v.9.0.3和babel v.5.0.8。
以下是我希望工作的示例代码:
// Make transducer
var xAdd10 = transducers.map(function (x) {
return x + 10;
});
// Make a channel, using the transducer
var ch = csp.chan(2, xAdd10);
// Put a number in the channel
csp.putAsync(ch, 1); // This throws an error
我错过了什么?对我而言,这与js-csp here的文档和传感器here(从倒数第二点到最后一点)的文档基本相同。
csp库足以帮助抛出堆栈跟踪错误。看起来像这样:
error in channel transformer TypeError: xform.@@transducer/step is not a function
at Object.@@transducer/step (file:///Users/g/code/learning/generators-csp/js/lib/csp.js:1511:44)
at Channel._put (file:///Users/g/code/learning/generators-csp/js/lib/csp.js:1288:57)
at put_then_callback (file:///Users/g/code/learning/generators-csp/js/lib/csp.js:1652:24)
at file:///Users/g/code/learning/generators-csp/js/12-transducers-1.js:21:10
我做错了什么?一个工作示例(尽可能简单)也非常有用。
一切都可以在我的github here找到。具体的,与上面的代码here相同,可以找到csp和换能器in the js/lib folder。
答案 0 :(得分:6)
对我而言,这与js-csp文档中的内容基本相同,对于此处的传感器(从倒数第二点到最后一点)。
是的,这是如何记录的,这就是它应该如何运作的。会工作。
问题是您使用旧版本的transducer.js。在this discussion之后,传感器协议方法名称已从.step
更改为.@@transducer/step
,依此类推。对于版本3.0,transducers.js did incorporate this,但您复制到存储库中的/dist/transducers.js
file未更新。相比之下,您使用的js-csp确实依赖于新协议 - 并且会抛出预期方法不存在的错误。
因此,如果您手动构建最新版本的transducers.js,它将起作用。我还filed a bug: - )