Подтвердить что ты не робот

Использование преобразователей .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.

4b9b3361

Ответ 1

Для меня это по существу то же самое, что и в документации для js-csp здесь, а также для преобразователей здесь (от 2-й до последней маркерной точки).

Да, это то, как это документировано, и вот как это должно работать. Будет работать.

Проблема в том, что вы используете старую версию transducers.js. Следуя этой дискуссии, имена методов протокола преобразователя были изменены с .step на [email protected]@transducer/step и так далее. С версией 3.0, transducers.js включили это, но /dist/transducers.js файл, который вы скопировали в свой репозиторий, не обновлялся. В отличие от используемого js-csp, он полагается на новый протокол - и выдает ошибку, что ожидаемые методы не существуют.

Итак, если вы вручную создадите новейшую версию преобразователей .js, она будет работать. Я также подал ошибку: -)