2017-01-13 2 views
1

Ich möchte wie etwas schreiben:Higland.js: wickeln toCallback in Versprechen

const Promise = require('bluebird') 
const H = require('highland') 

Promise.fromCallback(
    H([1, 2, 3]).toCallback 
).then(function(val) { 
    expect(val).eql(1, 2, 3) 
}) 

Aber ich sehe einen Fehler:

TypeError: this.consume is not a function 

Wie kann ich den Kontext, in dem Fall richtig binden

Antwort

1

Das erste Problem ist, dass .toCallback verliert seine Wettbewerbe, so this ist kein Stream mehr und deshalb this.consume ist keine Funktion.

Der einfachste Weg zu lösen ist es, es mit einer Pfeilfunktion zu wickeln.

cb => H([1, 2, 3]).toCallback(cb) 

Die zweite Sache ist, dass Sie toCallback nicht mit den Steams verwenden können, die mehrere Werte ausgeben, weil es einen Fehler wirft. (Bitte überprüfen Sie the docs)

es zu beheben Sie .collect() wie dies nennen könnte:

const Promise = require('bluebird'); 
 
const H = require('highland'); 
 
const assert = require('assert'); 
 

 
Promise.fromCallback(
 
\t cb => H([1, 2, 3]).collect().toCallback(cb) 
 
).then(function(val) { 
 
\t assert.deepEqual(val, [1, 2, 3]); 
 
\t console.log('All good.'); 
 
});

+0

wirklich cool Antwort, thx! – kharandziuk

Verwandte Themen