我正在使用Azure的DocumentDb
和F#,我已经能够创建新文档,加载所有文档,并通过Id加载文档,并应用了where
过滤器。但我不能替换任何文件,F#中的文档很少。
这是我用来更新文档的功能:
let update (c : MyObject) =
let cli = createClient()
cli.ReplaceDocumentAsync(documentUri(), c)
|> Async.AwaitTask
|> ignore
c
createClient
只是创建一个DocumentClient
的新实例,其中包含相同的参数,可让我加载&保存新文件。同样,documentUri()
也适用于其他功能。
我的猜测是我实际上从任务中得到了一个有用的响应,我忽略了(基于我见过的例子)。然而,试图获得这种反应是很困难的。
这是我试图开始工作的一种方法,但结果却出现了一种我似乎无法投射的类型:
let update2 ( c : MyObject) =
let cli = createClient()
let updatedDoc = async {
return! cli.ReplaceDocumentAsync(documentUri(), c) |> Async.AwaitTask
}
updatedDoc
此处updatedDoc
的类型为Async<ResourceResponse<Document>>
。我似乎无法找到从Async
包装器中取出它的方法,一旦我这样做,我不确定如何将Document
转换为MyObject
。
所以,总结一下:
答案 0 :(得分:2)
F#Task
计算与C#async
的计算不同,因为它们不是当场执行的。简单地创建let x = async { printfn "Foo!" } // No output is generated here
计算无效:
Task
为了实际运行它,您需要指定如何运行它:在线程池上安排它,在当前线程上同步运行,转换为let x = async { printfn "Foo!" }
Async.RunSynchronously x // Prints "Foo!"
等例如:
let y = async {
do! x
printfn "Bar!"
}
Async.RunSynchronously y // Prints "Foo!" and then "Bar!"
或者,可以&#34;运行&#34;通过将其包含在另一个异步计算中进行异步计算,然后以某种方式执行该异步计算:
let update2 ( c : MyObject) =
let cli = createClient()
let updateDoc = cli.ReplaceDocumentAsync(documentUri(), c) |> Async.AwaitTask
Async.RunSynchronously updateDoc
因此,为了执行您的第二个示例(并希望看到返回的错误),您需要实际运行生成的工作流程:
.ui-autocomplete-input {
/* Your CSS here */
}