Использование преобразователей .js в js-csp
Я играю с двумя превосходными библиотеками: 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.
Ответы
Ответ 1
Для меня это по существу то же самое, что и в документации для js-csp здесь, а также для преобразователей здесь (от 2-й до последней маркерной точки).
Да, это то, как это документировано, и вот как это должно работать. Будет работать.
Проблема в том, что вы используете старую версию transducers.js. Следуя этой дискуссии, имена методов протокола преобразователя были изменены с .step
на [email protected]@transducer/step
и так далее. С версией 3.0, transducers.js включили это, но /dist/transducers.js
файл, который вы скопировали в свой репозиторий, не обновлялся. В отличие от используемого js-csp, он полагается на новый протокол - и выдает ошибку, что ожидаемые методы не существуют.
Итак, если вы вручную создадите новейшую версию преобразователей .js, она будет работать. Я также подал ошибку: -)