Promises 作为控制状态的方式
Promises as way of controlling state
我希望您对我的部分代码中使用 promises 提出意见。
我有一个视图,我们称它为 Foo
。 Foo
实现接口 EmbeddableView
。
我在视图 Bar
中嵌入了 Foo。 Foo
不知道它嵌入在任何地方并且 Bar
不关心 Foo
的内容,只关心它是否有效。发生这种情况的方式是接口 EmbeddableView
有一个 function
像 getValidationPromise
返回一个承诺。
当视图 Foo
解析承诺时,bar
会收到通知,其内容要么无效,要么有效。
但是,验证状态更改不是一次性的。它会来回跳跃。它不再是对完成操作的承诺。它可以失败、再次失败、成功,也可能再次失败。你会说 promises 仍然是一种有意义的实现方式吗?
任何关于如何在 typescript/javascript 中以有意义的方式实现这一点的评论都将受到赞赏。
However, that validation state change is not a one time thing. It will jump back and forth. It is no longer a promise on the completion of an operation. It can fail, re-fail, success and maybe fail again. Would you say promises is still a meaningful way of implementing this?
没有
您可以使用事件机制:
interface EmbeddableView {
addValidationListener(listener: (valid: boolean) => void): void;
}
在实现中,将监听器存储在一个数组中,然后在每次状态变化时调用所有监听器:
class Foo implements EmbeddableView {
private listeners = [];
public addValidationListener(listener: (valid: boolean) => void) {
this.listeners.push(listener);
}
private fireValidationListeners(valid: boolean) {
for (let cb of this.listeners)
cb(valid);
}
}
如果创建侦听器 (Bar) 的代码部分被删除/重新生成,请注意内存泄漏。在这种情况下,您需要添加一些内容来删除侦听器(例如,使用 addValidationListener
返回的处理程序调用的方法 removeValidationListener
)。
你应该看看 Observables,例如 RX.js。
根据你的问题:
validation state change is not a one time thing. It will jump back and forth. It is no longer a promise on the completion of an operation. It can fail, re-fail, success and maybe fail again. Would you say promises is still a meaningful way of implementing this?
从此(很好)Introduction to Reactive Programming:
A Promise is simply an Observable with one single emitted value. Rx streams go beyond promises by allowing many returned values.
(强调我的)
我希望您对我的部分代码中使用 promises 提出意见。
我有一个视图,我们称它为 Foo
。 Foo
实现接口 EmbeddableView
。
我在视图 Bar
中嵌入了 Foo。 Foo
不知道它嵌入在任何地方并且 Bar
不关心 Foo
的内容,只关心它是否有效。发生这种情况的方式是接口 EmbeddableView
有一个 function
像 getValidationPromise
返回一个承诺。
当视图 Foo
解析承诺时,bar
会收到通知,其内容要么无效,要么有效。
但是,验证状态更改不是一次性的。它会来回跳跃。它不再是对完成操作的承诺。它可以失败、再次失败、成功,也可能再次失败。你会说 promises 仍然是一种有意义的实现方式吗?
任何关于如何在 typescript/javascript 中以有意义的方式实现这一点的评论都将受到赞赏。
However, that validation state change is not a one time thing. It will jump back and forth. It is no longer a promise on the completion of an operation. It can fail, re-fail, success and maybe fail again. Would you say promises is still a meaningful way of implementing this?
没有
您可以使用事件机制:
interface EmbeddableView {
addValidationListener(listener: (valid: boolean) => void): void;
}
在实现中,将监听器存储在一个数组中,然后在每次状态变化时调用所有监听器:
class Foo implements EmbeddableView {
private listeners = [];
public addValidationListener(listener: (valid: boolean) => void) {
this.listeners.push(listener);
}
private fireValidationListeners(valid: boolean) {
for (let cb of this.listeners)
cb(valid);
}
}
如果创建侦听器 (Bar) 的代码部分被删除/重新生成,请注意内存泄漏。在这种情况下,您需要添加一些内容来删除侦听器(例如,使用 addValidationListener
返回的处理程序调用的方法 removeValidationListener
)。
你应该看看 Observables,例如 RX.js。
根据你的问题:
validation state change is not a one time thing. It will jump back and forth. It is no longer a promise on the completion of an operation. It can fail, re-fail, success and maybe fail again. Would you say promises is still a meaningful way of implementing this?
从此(很好)Introduction to Reactive Programming:
A Promise is simply an Observable with one single emitted value. Rx streams go beyond promises by allowing many returned values.
(强调我的)