F#中如何在同一行获取JSON元素的String值
F# 异步管道合并实现方案
可以通过Async.map组合管道实现单行编写,无需声明独立中间变量。
正确写法
let! JSonElementString = row.EvalOnSelectorAsync("div.moneyout","node => node.innerText") |> Async.AwaitTask |> Async.map (fun js -> js.Value.GetString())
实现原理
Async.AwaitTask返回的是Async<JsonElement>类型,属于未展开的异步包装值,无法直接对其调用.Value等实例方法Async.map可以接收操作异步内部值的函数,将函数提升到异步上下文执行,执行后返回的依然是Async<string>类型,刚好适配let!的绑定要求,不需要额外声明中间变量存储异步执行结果。
如果需要处理空值风险,可在lambda内补充空判断逻辑,同样可以整合到同一行管道中。
内容的提问来源于stack exchange,提问作者Martin Thompson
相关产品推荐
相关产品推荐

