什么是*像*承诺但可以解决多次?

What is *like* a promise but can resolve mutliple times?

我正在寻找一种 pub/sub 机制,它的行为类似于承诺,但可以多次解析,并且行为类似于事件,除非您在通知发生后订阅,它会触发最新的值。

我知道 notify,但 deferred.notify 是顺序敏感的,因此它的行为就像一个事件。例如:

d.notify('notify before'); // Not observed :(
d.promise.progress(function(data){ console.log(data) });
d.notify('notify after');  // Observed
setTimeout(function(){ d.notify('notify much later') }, 100); // Also Observed

fiddle: http://jsfiddle.net/foLhag3b/

我想要的通知系统非常适合 UI 组件,该组件应该更新以反映其背后数据的状态。在这些情况下,您不想关心数据是否已经到达,而是希望在数据到达时进行更新。

也许这与 Immediate mode UIs 相似,但有所不同,因为它是基于消息的。

据我所知,基于消息的 UI 更新的最新技术是使用承诺或回调进行初始化,然后还绑定更新事件:

myUIComponent.gotData(model.data);
model.onUpdate(myUIComponent.gotData); // doing two things is 2x teh workz :(

我不想两者都做。我认为任何人都不必这样做,用例很常见,可以抽象出来。

model.whenever(myUIComponent.gotData); // yay one intention === one line of code

我可以建立一个机制来做我想做的事,但我想看看是否已经存在这样的 pub/sub 机制。很多聪明人在 CS 方面做了很多工作,我认为这个概念一定存在,我只是在寻找它的名字。

需要说明的是,我不打算更改整个框架,例如 Angular 或 React。我只是在寻找 pub/sub 机制。最好是使用 notifrlemme-knotouch-base.

等时髦名称的已知概念的实现

你会想看看 (functional) reactive programming。您正在寻找的概念在 FRP 中称为 BehaviorSignal。它模拟值随时间的变化,并且可以随时检查(连续保存一个值,与离散触发事件的流相反)。

var ui = state.map(render); // whenever state updates, so does ui with render() result

JS 中一些流行的库是 Bacon and Rx,但是它们使用自己的术语:您会发现 propertiesobservables.