Forum Discussion
Anonymous
7 years agoNot applicable
Delay web query until condition met from another web query
I use an API that provides a Json response which includes a statusUrl and a downloadUrl. If I immediately hit up the downloadUrl there is usually no data. The statusUrl Json response advises when t...
- 7 years ago
Hi Anonymous,
I've prepared a template which you can use for solving your problem.
You have to add your logic for processing JSON responses and modify the WaitForList according your needs.
let // request data RequestDataRecord = fnProcessJson(Web.Contents("request data URL")), // wait 10x for 5 seconds WaitForList = List.Repeat({5}, 10),
// wait until the response is COMPLETE, but max 50 secs WaitForStatus = List.MatchesAny( WaitForList, each Function.InvokeAfter( () => fnProcessJson(Web.Contents("http://StatusCheckURL")), #duration(0,0,0,_) ) = "COMPLETE" ), // download file if WaitForStatus was successful DownloadFile = if WaitForStatus then fnProcessJson(Web.Contents("download data URL")) else null in DownloadFile
Nolock
7 years agoResident Rockstar
Hi Anonymous,
do you mean this function?
() => fnProcessJson(Web.Contents("http://StatusCheckURL"))The result should be the status (i.e. COMPLETE, INPROGRESS, FAILED, ...) and its datatype is text because I compare it with the string "COMPLETE" on the next line.
But you can modify the code in a form which fulfils all your expectations. It is just a template how it could work.
Anonymous
7 years agoNot applicable
Yep, that's the function. So.. I created the function, the output is text "COMPLETE" .
I'm not sure what odds going wrong, I still get the "null" output.
I'm not sure what odds going wrong, I still get the "null" output.
- Nolock7 years agoResident Rockstar
Hi Anonymous,
a simplified version that waits just for one second and then returns "xxx". Maybe it helps.
let // wait 10x for 5 seconds WaitForList = List.Repeat({1}, 10), WaitForStatus = List.MatchesAny( WaitForList, each Function.InvokeAfter( () => "COMPLETE", #duration(0,0,0,_) ) = "COMPLETE" ), DownloadFile = if WaitForStatus then "xxx" else null in DownloadFile