in cmd/network.go [142:169]
func pollAsyncJob(r *Request, jobID string) (map[string]interface{}, error) {
for timeout := float64(r.Config.Core.Timeout); timeout > 0.0; {
startTime := time.Now()
spinner := r.Config.StartSpinner("polling for async API result")
queryResult, queryError := NewAPIRequest(r, "queryAsyncJobResult", []string{"jobid=" + jobID}, false)
diff := time.Duration(1*time.Second).Nanoseconds() - time.Now().Sub(startTime).Nanoseconds()
if diff > 0 {
time.Sleep(time.Duration(diff) * time.Nanosecond)
}
timeout = timeout - time.Now().Sub(startTime).Seconds()
r.Config.StopSpinner(spinner)
if queryError != nil {
return queryResult, queryError
}
jobStatus := queryResult["jobstatus"].(float64)
if jobStatus == 0 {
continue
}
if jobStatus == 1 {
return queryResult["jobresult"].(map[string]interface{}), nil
}
if jobStatus == 2 {
return queryResult, errors.New("async API failed for job " + jobID)
}
}
return nil, errors.New("async API job query timed out")
}