我对 Power Query 非常陌生,正在尝试在 Excel 中拼凑一些演示。
我有两个 Web 端点:我必须将一些内容发布到第一个端点,这给了我第二个端点的 url,然后我必须查询第二个端点以获取实际结果。第二个端点返回一个 json 响应,其中有一个字段表示结果是否准备就绪。如果结果已准备好,则可以对其进行处理,如果未准备好,则应稍后再次查询端点。
这是我到目前为止的代码:
let
apikey = "MYAPIKEY",
proxyendpoint = "URL OF THE FIRST ENDPOINT",
bytesbody = File.Contents("FILE TO POST"),
headers = [#"Ocp-Apim-Subscription-Key" = apikey],
bytesresp = Web.Contents(proxyendpoint, [Headers=headers, Content=bytesbody]),
jsonresp = Json.Document(bytesresp),
opLoc = jsonresp[OperationLocation],
getResult = (url) =>
let
linesBody = Web.Contents(url, [Headers=headers]),
linesJson = Json.Document(linesBody),
resultStatus = linesJson[status],
linesData = if (resultStatus = "Succeeded") then
linesJson[recognitionResult][lines]
else
Function.InvokeAfter(()=>@getResult(url),#duration(0,0,0,5))
in
linesData,
linesText = List.Transform(getResult(opLoc), each _[text]),
table = Table.FromList(linesText)
in
table
我的问题是,当我使用 Fiddler 检查时,我看到第二个端点被查询一次,我可以在响应中检查结果尚未准备好,数据加载“挂起”,但我看不到任何其他调用第二个端点,所以基本上我的递归调用没有被评估。
我做错了什么?
最佳答案
使用 Function.InvokeAfter 第一个参数中的 ()=>,Function.InvokeAfter 的结果将是函数 getResult,而不是 getResult 的结果。所以应该忽略它:
Function.InvokeAfter(@getResult(url),#duration(0,0,0,5))
关于powerquery - Power Query 延迟递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323261/