【发布时间】:2016-12-27 00:13:03
【问题描述】:
我正在尝试创建一个不需要订阅的热门 observable。这是一个库,我想让用户能够调用某些方法并避免调用 subscribe() 来触发 observables。最初我有这个:
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 方法似乎永远不会被完全调用(我假设序列中的第一个 observable 根本不会触发,因为没有调用有效的 subscribe)。但我虽然publish() 会自动调用可观察链?
如何让 add 方法返回的 observable,hot?
【问题讨论】: