代码之家  ›  专栏  ›  技术社区  ›  Ray

这个异步管道操作符可以吗

  •  1
  • Ray  · 技术社区  · 7 年前

    如果我们定义一个 |>! 像这样的操作员:

    let (|>!) a f = async {
        let! r = a
        return f r
    } 
    

    那就不用写了

    let! r = fetchAsync()
    work r
    

    我们可以写

    fetchAsync() |>! work
    

    1 回复  |  直到 7 年前
        1
  •  7
  •   rmunn    7 年前

    这个 |>! standard "map" pattern “包装器”类型,而不仅仅是 async . 如果你的 return f r return! f r standard "bind" pattern ,按惯例应写为操作员 >>=

    这是个好主意,但有一点小小的改变。你已经用async值作为第一个参数,函数作为第二个参数编写了它,但是你使用它的方式, fetchAsync() |>! work 第一 let (|>!) f a = ... . (如果你看一下Scott Wlaschin在我链接的第一个例子中实现这一点的方式,他也将函数作为第一个参数)此外,我认为大多数F#程序员不会选择将其作为运算符编写,而是作为一个调用 Async.map

    let result =
        fetchAsync()
        |> Async.map step1
        |> Async.map step2
        |> Async.map step3