在RxJS5中对可观察物进行宣传

时间:2017-10-05 03:59:24

标签: javascript callback rxjs bluebird rxjs5

是否可以创建类似于Bluebird的promisify工作方式的可观察量?

参考:http://bluebirdjs.com/docs/api/promise.promisify.html

处理回调的常规方法

someFunc = callback => handleCallback(callback)

使用Promise处理回调

someFunc = callback => (
    new Promise(resolve => handleCallback(resolve))
    .then(callback)
)

Fancy Bluebird包装器使用Promise手动处理回调

someFunc = callback => (
    Promise.promisify(handleCallback)()
    .then(callback)
)

同样,观察者也需要类似的要求:

可观察的创作

someFunc = callback => (
    Rx.Observable
    .create(observer => (
        handleCallback(() => observer.next())
    ))
    .subscribe(callback)
)

Callback Observable Wrapper

someFunc = callback => (
    Rx.Observable
    .fromCallback(handleCallback)
    .subscribe(callback)
)

1 个答案:

答案 0 :(得分:0)

使用bindCallback方法处理此问题的正确方法。

这个问题的解决方案是:

someFunc = callback => (
    Rx.Observable
    .bindCallback(handleCallback)()
    .subscribe(callback)
)

由于bindCallback返回一个函数,你在最终回调arg之前传入的参数将被传递给返回的函数。

还有bindNodeCallback完全相同,除了返回的第一个arg是一个可能的错误消息,正如您在Node.js回调中通常看到的那样。

由于这两种方法都只触发一次,然后自动取消订阅,因此您可能需要根据需要使用fromEventPattern。它会在调用回调的任何时候继续触发observer.next()