- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建一个不需要订阅的热门可观察对象。这是针对一个库的,我想让用户能够调用某些方法,并避免需要调用 subscribe() 来触发可观察量。最初我有这个:
const q = new Queue();
q.add('foo bar baz').subscribe(); // <<< need to call subscribe
Queue.prototype.add = Queue.prototype.enqueue = function (lines) {
lines = _.flattenDeep([lines]);
var lockAcquired = false;
return this.init()
.flatMap(() => {
return acquireLock(this)
})
.flatMap(() => {
lockAcquired = true;
return appendFile(this, lines)
})
.flatMap(() => releaseLock(this))
.catch(err => {
if (lockAcquired) {
return releaseLock(this);
}
else {
return makeGenericObservable();
}
})
};
为了让 observable 变得热门,我想我可以做这样的事情:
const q = new Queue();
q.add('foo bar baz'); // <<< don't call subscribe
Queue.prototype.add = Queue.prototype.enqueue = function (lines) {
lines = _.flattenDeep([lines]);
var lockAcquired = false;
return this.init()
.flatMap(() => {
return acquireLock(this)
})
.flatMap(() => {
lockAcquired = true;
return appendFile(this, lines)
})
.flatMap(() => releaseLock(this))
.catch(err => {
if (lockAcquired) {
return releaseLock(this);
}
else {
return makeGenericObservable();
}
})
.publish()
.share() // this too?
};
但是问题是,当我调用 publish()
时,什么也没有发生,并且 add 方法似乎永远不会被完全调用(我假设序列中的第一个可观察对象根本不会触发,因为实际上订阅未被调用)。但我认为 publish()
会自动调用可观察链?
如何使 add 方法返回的 observablehot?
最佳答案
你误会了。热可观察确实需要像冷可观察一样订阅。不同之处在于,hot 使用一些外部生产者(如 dome 元素)并开始在订阅时收听它。另一方面,冷可观察者在订阅时在内部创建生产者。
这会导致您可能会错过一些热可观察事件,因为外部生产者对订阅一无所知并独立发出。通过冷观察,你不会错过任何东西,因为生产者是在订阅上创建的。
长话短说,您可以在热或冷可观察值之上构建任何可观察值链,但在您订阅它之前什么都不会发生。
PS。无需将publish
与
share
一起使用,因为后者是
alias对于
.publish().refCount()
。
关于node.js - 发布 observable 使其变得*热门*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41337517/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!