gpt4 book ai didi

node.js - 发布 observable 使其变得*热门*

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:30 27 4
gpt4 key购买 nike

我正在尝试创建一个不需要订阅的热门可观察对象。这是针对一个库的,我想让用户能够调用某些方法,并避免需要调用 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。无需将 publishshare 一起使用,因为后者是 alias对于 .publish().refCount()

关于node.js - 发布 observable 使其变得*热门*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41337517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com