Higland.js:将 toCallback 包装到 promise 中

Higland.js: wrap toCallback into promise

我想写这样的东西:

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

案例中如何正确绑定上下文

第一个问题是 .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(
 cb => H([1, 2, 3]).collect().toCallback(cb)
).then(function(val) {
 assert.deepEqual(val, [1, 2, 3]);
 console.log('All good.');
});