in cmd/network.go [142:178]
func pollAsyncJob(r *Request, jobID string) (map[string]interface{}, error) {
timeout := time.NewTimer(time.Duration(float64(r.Config.Core.Timeout)) * time.Second)
ticker := time.NewTicker(time.Duration(2 * time.Second))
defer ticker.Stop()
defer timeout.Stop()
spinner := r.Config.StartSpinner("polling for async API result")
defer r.Config.StopSpinner(spinner)
for {
select {
case <-r.Config.C:
return nil, errors.New("async API job polling interrupted")
case <-timeout.C:
return nil, errors.New("async API job query timed out")
case <-ticker.C:
queryResult, queryError := NewAPIRequest(r, "queryAsyncJobResult", []string{"jobid=" + jobID}, false)
if queryError != nil {
return queryResult, queryError
}
jobStatus := queryResult["jobstatus"].(float64)
switch jobStatus {
case 0:
continue
case 1:
return queryResult["jobresult"].(map[string]interface{}), nil
case 2:
return queryResult, errors.New("async API failed for job " + jobID)
}
}
}
}