缺失问候之谜
Source: Dev.to
源代码与设置
本练习的源代码可在此获取。您可以克隆仓库并按照其 README 中的设置步骤在本机运行此序列,或直接在此处跟随示例。
下面片段中的部分输出已省略以保持简洁。
iex(1)> import Journey.Node
Journey.Node
iex(2)> graph = Journey.new_graph(
"Customer Onboarding",
[
input(:name),
input(:email_address),
compute(
:greeting,
[:name, :email_address],
fn values ->
welcome = "Welcome, #{values.name} at #{values.email_address}"
IO.puts(welcome)
{:ok, welcome}
end
)
]
)
应用会为每位访问您网站的客户启动此工作流的执行(Journey.start(graph))。客户会收到问候,业务也随之繁荣。
缺失问候的谜团
突然,您接到联合创始人 Ms. Too‑Ticky 的电话:
“Mr. Hemulen,这位新客户没有收到‘欢迎’问候!为什么?!”
别担心——Journey.Tools.introspect/1 可以帮忙!
谜团解决了吗?
让我们检查 Mr. Hemulen 的 onboarding 执行,看看 :greeting 是否已经计算。
iex(5)> Journey.Tools.introspect(eid) |> IO.puts()
Values:
- Set:
- name: '"Hemulen"' | :input
set at 2025-12-10 09:02:16Z | rev: 1
- Not set:
- email_address: | :input
- greeting: | :compute
Computations:
- Outstanding:
- greeting: ⬜ :not_set (not yet attempted) | :compute
:and
├─ ✅ :name | &provided?/1 | rev 1
└─ 🛑 :email_address | &provided?/1
:greeting 被阻塞,因为我们已有 Mr. Hemulen 的 :name,但缺少他的 :email_address。
谜团已解!你好,Mr. Hemulen!
一旦 Mr. Hemulen 提供了电子邮件地址,问候就会被触发:
iex> Journey.set(eid, :email_address, "hemulen@gojourney.dev")
Welcome, Hemulen at hemulen@gojourney.dev
验证
现在 :greeting 应该已经计算完成。我们来检查一下:
iex(7)> Journey.Tools.introspect(eid) |> IO.puts()
Values:
- Set:
- greeting: '"Welcome, Hemulen at hemulen@gojourney.dev"' | :compute
computed at 2025-12-10 09:03:06Z | rev: 4
- email_address: '"hemulen@gojourney.dev"' | :input
set at 2025-12-10 09:03:06Z | rev: 2
- name: '"Hemulen"' | :input
set at 2025-12-10 09:02:16Z | rev: 1
Computations:
- Completed:
- :greeting (CMPR7RL0T7T2VTJAG9Z0748): ✅ :success | :compute | rev 4
inputs used:
:name (rev 1)
:email_address (rev 2)
在 :name 与 :email_address 都存在的情况下,:greeting 成功计算。Ms. Too‑Ticky 很满意,Mr. Hemulen 也很开心。
一次调用 Journey.Tools.introspect/1——谜团已解!
参考资料
- 本演练的源代码:
- Journey 库文档: