2017-01-13 17 views
1

Я хочу написать что-то вроде:Higland.js: обернуть toCallback в обещание

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

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

Но я вижу ошибку:

TypeError: this.consume is not a function 

Как правильно связать контекст, в случае

ответ

1

Первой проблемой является то, что .toCallback теряет свои конкурсы, поэтому this больше не является потоком, и поэтому this.consume не является функцией.

Способ облегчения решения состоит в том, чтобы обернуть его функцией стрелки.

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

Во-вторых, вы не можете использовать toCallback с парами, излучающими несколько значений, потому что это вызовет ошибку. (Пожалуйста, проверьте the docs)

Чтобы исправить это можно было бы назвать .collect() так:

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

действительно классный ответ, ТНХ! – kharandziuk