繁体   English   中英

承诺RxJS5中的可观察对象

[英]Promisify for Observables in RxJS5

是否可以创建类似于Bluebird的promisify工作方式的可观察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)
)

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

该问题的解决方案是:

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

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

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

由于这两种方法仅触发一次,然后自动取消订阅,因此您可能需要根据需要使用fromEventPattern 每当调用该回调函数时,它将继续触发observer.next()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM