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.');
});
我想写这样的东西:
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.');
});