在js-csp中使用transducers.js

时间:2015-04-20 12:31:04

标签: javascript js-csp

我正在玩两个优秀的图书馆:js-csptransducers.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

1 个答案:

答案 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: - )