powerquery - Power Query 延迟递归

标签 powerquery m

我对 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/

相关文章:

excel - 如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?

if-statement - 过滤 DAX 中连接字段的特定值

f# - 如何根据 Power Query 中 Power BI 参数中以逗号分隔的值列表删除行?

Excel Power Query/M - 根据网站上可用的页数动态组合连接数

powerbi - 如何在 Power BI DataConnector 中存储凭据?

excel - Power Query Table.Group List.Sum(两列)

parameters - 从禁用的查询中设置新参数

excel - 刷新 CSV 导入时 Power Query 无法添加列

excel - 电源查询过滤每年的前 N ​​个值

powerbi - 如何创建将正确值从行解析到列表的新列