首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS5中可观测性的简化

RxJS5中可观测性的简化
EN

Stack Overflow用户
提问于 2017-10-05 11:59:24
回答 1查看 492关注 0票数 0

是否有可能创建类似于蓝鸟的promisify工作方式的可观察性?

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

处理回调的常规方法

代码语言:javascript
复制
someFunc = callback => handleCallback(callback)

使用Promise处理回调

代码语言:javascript
复制
someFunc = callback => (
    new Promise(resolve => handleCallback(resolve))
    .then(callback)
)

使用Bluebird包装器手动处理带有Promise的回调

代码语言:javascript
复制
someFunc = callback => (
    Promise.promisify(handleCallback)()
    .then(callback)
)

同样,对可观测对象也有类似的要求:

可观察的创建

代码语言:javascript
复制
someFunc = callback => (
    Rx.Observable
    .create(observer => (
        handleCallback(() => observer.next())
    ))
    .subscribe(callback)
)

回调可观察包装器

代码语言:javascript
复制
someFunc = callback => (
    Rx.Observable
    .fromCallback(handleCallback)
    .subscribe(callback)
)
EN

回答 1

Stack Overflow用户

发布于 2017-10-05 12:13:02

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

这个问题的解决方案是:

代码语言:javascript
复制
someFunc = callback => (
    Rx.Observable
    .bindCallback(handleCallback)()
    .subscribe(callback)
)

因为bindCallback返回一个函数,所以在最后一个回调参数arg之前传入的参数将被传递到返回的函数中。

也有bindNodeCallback,它是完全相同的,除了返回的第一个arg可能是一个错误消息,就像你通常在Node.js回调中看到的一样。

由于这两种方法都只触发一次,然后自动取消订阅,因此您可能希望根据需要改用fromEventPattern。只要回调被调用,它就会一直触发observer.next()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46577634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档