2015-04-20 8 views
13

में transducers.js का उपयोग करके मैं दो उत्कृष्ट पुस्तकालयों के साथ खेल रहा हूं: js-csp और transducers.js उनके चारों ओर अपने सिर को लपेटने की कोशिश कर रहा है (और जेनरेटर)।जेएस-सीएसपी

मुझे लगता है कि मुझे चैनलों का उपयोग करने की अच्छी समझ है, लेकिन जब मैंने ट्रांसड्यूसर (जो मुझे अभी तक अच्छी तरह से समझ में नहीं आता है) लागू करने का फैसला किया है, तो मैं इसे काम नहीं कर सकता। यहां तक ​​कि मेरे लिए उदाहरण भी काम नहीं कर रहे हैं।

विशिष्ट ट्रांसड्यूसर.जेएस फ़ाइल जो मैं उपयोग करता हूं, this one है, और जेएस-सीएसपी के लिए, मैंने अपना खुद का संकलन किया (जो कई अन्य प्रयोगों के लिए ठीक काम कर रहा है)। असल में मैंने इसके साथ एक फाइल संकलित की:

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 

मैं क्या याद आ रही है:

यहां कुछ नमूना कोड है कि मैं काम करने के लिए उम्मीद थी है? मेरे लिए यह अनिवार्य रूप से वही है जो जेएस-सीएसपी here के लिए प्रलेखन में पाया जा सकता है, और ट्रांसड्यूसर here (दूसरे से अंतिम बुलेट बिंदु) के लिए।

सीएसपी लाइब्रेरी एक स्टैक ट्रेस के साथ त्रुटि फेंकने के लिए पर्याप्त सहायक है। ऐसा लगता है:

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 

मैं क्या गलत कर रहा हूं? एक कामकाजी उदाहरण (यथासंभव सरल) भी बहुत उपयोगी होगा।

सब कुछ मेरे जिथब, here पर पाया जा सकता है। विशिष्ट के साथ, ऊपर दिए गए कोड के समान, here, सीएसपी और ट्रांसड्यूसर in the js/lib folder पाया जा सकता है।

+0

आप किस संस्करण का उपयोग कर रहे हैं? आपका उदाहरण मेरे लिए io.js v1.7.1, [email protected], [email protected] के साथ काम करता है। यह नोड v0.12.2 (- सद्भावना के साथ) के साथ भी काम करता है। – joews

+0

https://gist.github.com/jwhitfieldseed/4d4b5510720427f75d00 – joews

+0

ओहॉ शायद कुछ ऐसा है जो मुझे गलत समझा जाता है? मैं मूल रूप से बस ब्राउज़र का उपयोग करता हूं (मैं बस वास्तव में चारों ओर बेवकूफ़ बना रहा हूं)। तो मैंने बेबेल के साथ अपना स्वयं का सीएसपी (इसे वैश्विक रूप में बेनकाब करने के लिए) संकलित किया। और फिर मैंने यहां पाया गया एक का उपयोग किया: https://github.com/jlongster/transducers.js/tree/master/dist –

उत्तर

6

मुझे इस के लिए अनिवार्य रूप से क्या यहाँ js-सीएसपी के लिए दस्तावेज में पाया जा सकता है के रूप में ही है, और यहाँ ट्रांसड्यूसर (पिछले बुलेट बिंदु को 2) के लिए।

हां, इस तरह यह दस्तावेज किया गया है, और इस तरह यह काम करना चाहिए। काम करेगा।

समस्या यह है कि आप ट्रांसड्यूसर.जेएस के पुराने संस्करण का उपयोग कर रहे हैं। this discussion के बाद, ट्रांसड्यूसर प्रोटोकॉल विधि नाम .step से [email protected]@transducer/step और अन्य में बदल दिए गए थे। संस्करण 3.0 के साथ, transducers.js did incorporate this, लेकिन /dist/transducers.js file जिसे आपने अपनी रिपॉजिटरी में कॉपी किया था अपडेट नहीं किया गया था। इसके विपरीत, आप जिस जेएस-सीएसपी का उपयोग कर रहे हैं वह नए प्रोटोकॉल पर भरोसा करता है - और एक त्रुटि फेंकता है कि अपेक्षित विधियां मौजूद नहीं हैं।

तो यदि आप मैन्युअल रूप से transducers.js का नवीनतम संस्करण बनाते हैं, तो यह काम करेगा। मेरे पास filed a bug है :-)

+0

यह काम किया! मुझे यह ध्यान रखना चाहिए था कि इसे 6 महीने पहले अपडेट किया गया था, 17 दिनों पहले बनाम जिथूब प्रोजेक्ट की जड़ में। धन्यवाद! ... अब मैं इन सब में अपनी यात्रा जारी रख सकता हूं। :) –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^