Я играю с двумя превосходными библиотеками: js-csp и transducers.js, пытаясь обернуть вокруг себя голову (и генераторы).
Я думаю, что у меня есть достойное понимание использования каналов, но когда я решил применить преобразователи (которые я еще не совсем понимаю, что еще не все), я не могу заставить их работать. Даже примеры не работают для меня.
Конкретный файл преобразователей .js, который я использую, этот, а для js-csp я скомпилировал свой собственный (который был отлично работает для многих других экспериментов). В основном я скомпилировал файл с этим:
import csp from 'js-csp';
window.csp = csp;
с браузером 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 здесь, а для преобразователей здесь (от 2 до последней маркерной точки).
Библиотека csp достаточно полезна, чтобы вывести ошибку с помощью трассировки стека. Выглядит так:
error in channel transformer TypeError: [email protected]@transducer/step is not a function
at [email protected]@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, здесь. С конкретным, идентичным приведенному выше коде, здесь, csp и преобразователи можно найти в папке js/lib.