当您查看“榆树介绍”的摘录时:
subscriptions : Model -> Sub Msg
subscriptions model =
Time.every 1000 Tick
model
传递给函数的参数subscriptions
必须与应用程序的当前模型相对应,即如果模型在不到 1 秒的时间内发生了变化,则model
传递给函数的参数subscriptions
必须考虑到这种修改。
在 JS 中,有 3 种不同的方法可以使在一个函数中计算的变量在另一个函数update msg model
中可见subscriptions model
:
- 使其成为全球性的,
- 使其成为对象属性,
- 从 A 调用 B 时将其作为参数传递。
但只有 2 如果您在函数中具有异步代码subscriptions
以保持模型“同步”:
1-使其成为全局变量,然后通过重新分配,更新当前模型的值:
function app() {
const currentModel = initModel
function update(msg, model) {
const newModel = doSomething(msg, model)
// REASSIGNMENT
currentModel = newModel
}
function subscriptions() {
doSomethingEveryOneSecond(currentModel)
}
}
2-使其成为对象属性
function app() {
const model = initModel
function update(msg, model) {
// MUTATION
model.value = doSomething(msg, model)
}
// model ALWAYS represents the current model
function subscriptions(model) {
doSomethingEveryOneSecond(model)
}
}
我的问题是它是如何在 The Elm Architecture 的“幕后”工作以保持模型update
和subscriptions
函数之间的同步?
多谢!