Forum Discussion
Delay web query until condition met from another web query
- 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
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
DownloadFileThanks, Nolock
Looks like this will do the job, just working through it at the moment.
What should the output of the function in the middle be? Should it be text? a list?
I think that's where I'm failing now..
- Nolock7 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.
- Anonymous7 years agoNot applicableYep, 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.- 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