缺失问候之谜

发布: (2025年12月11日 GMT+8 12:51)
3 min read
原文: Dev.to

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 库文档:
Back to Blog

相关文章

阅读更多 »