是否可以创建类似于Bluebird的promisify
工作方式的可观察量?
参考:http://bluebirdjs.com/docs/api/promise.promisify.html
someFunc = callback => handleCallback(callback)
someFunc = callback => (
new Promise(resolve => handleCallback(resolve))
.then(callback)
)
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)
)
答案 0 :(得分:0)
使用bindCallback
方法处理此问题的正确方法。
这个问题的解决方案是:
someFunc = callback => (
Rx.Observable
.bindCallback(handleCallback)()
.subscribe(callback)
)
由于bindCallback
返回一个函数,你在最终回调arg之前传入的参数将被传递给返回的函数。
还有bindNodeCallback
完全相同,除了返回的第一个arg是一个可能的错误消息,正如您在Node.js回调中通常看到的那样。
由于这两种方法都只触发一次,然后自动取消订阅,因此您可能需要根据需要使用fromEventPattern
。它会在调用回调的任何时候继续触发observer.next()
。