是否有可能创建类似于蓝鸟的promisify工作方式的可观察性?
参考:http://bluebirdjs.com/docs/api/promise.promisify.html
处理回调的常规方法
someFunc = callback => handleCallback(callback)使用Promise处理回调
someFunc = callback => (
new Promise(resolve => handleCallback(resolve))
.then(callback)
)使用Bluebird包装器手动处理带有Promise的回调
someFunc = callback => (
Promise.promisify(handleCallback)()
.then(callback)
)同样,对可观测对象也有类似的要求:
可观察的创建
someFunc = callback => (
Rx.Observable
.create(observer => (
handleCallback(() => observer.next())
))
.subscribe(callback)
)回调可观察包装器
someFunc = callback => (
Rx.Observable
.fromCallback(handleCallback)
.subscribe(callback)
)发布于 2017-10-05 12:13:02
处理此问题的正确方法是使用bindCallback方法。
这个问题的解决方案是:
someFunc = callback => (
Rx.Observable
.bindCallback(handleCallback)()
.subscribe(callback)
)因为bindCallback返回一个函数,所以在最后一个回调参数arg之前传入的参数将被传递到返回的函数中。
也有bindNodeCallback,它是完全相同的,除了返回的第一个arg可能是一个错误消息,就像你通常在Node.js回调中看到的一样。
由于这两种方法都只触发一次,然后自动取消订阅,因此您可能希望根据需要改用fromEventPattern。只要回调被调用,它就会一直触发observer.next()。
https://stackoverflow.com/questions/46577634
复制相似问题