GetAsyncResult

可以使用 GetAsyncResult 检索异步方法调用的结果。部分方法调用需要运行一段时间,并且在系统发送初始响应时可能仍未完成。要获得此方法调用的状态或结果,请使用 GetAsyncResult 轮询此方法返回的 asyncHandle 值。

GetAsyncResult 以标准方式返回操作的总体状态(正在进行、已完成或错误),但为操作返回的实际数据取决于原始方法调用,并且系统会将返回数据与每个方法记录在一起。

如果 keepResult 参数缺失或错误,则返回结果后,asyncHandle 将变为非活动,并且以后尝试查询 asyncHandle 时会返回错误。通过将 keepResult 参数设置为 true,您可以使 asyncHandle 保持活动状态,以便于日后进行查询。

参数

此方法具有以下输入参数:

名称 说明 类型 默认值 必需
asyncHandle 从原始异步方法调用返回的一个值。 整型
keepResult 如果为 true,则 GetAsyncResult 不会在返回异步结果后删除它,这样可以在日后查询 asyncHandle 时使用。 布尔型 false

返回值

此方法具有以下返回值:

名称 说明 类型
status 异步方法调用的状态。可能值:
  • running:该方法仍在运行。
  • complete:该方法已完成,并返回了结果或错误。
字符串
result 如果异步方法成功完成,则此结果为异步操作的结果。如果异步操作已失败,则此成员不存在。 字符串
error 如果状态为 complete 并且异步方法已失败,则此成员包含错误详细信息。如果异步操作已成功,则此成员不存在。 字符串
resultType 异步方法调用现在或过去执行的操作的类型。 字符串
details 如果状态为 running,则此成员包含与方法的当前操作相关的信息。如果异步方法未在运行,则此成员不存在。 JSON 对象
createTime 调用该异步方法时的时间(UTC+0 格式)。 ISO 8601 日期字符串
lastUpdateTime 上次更新异步方法的状态时的时间(UTC+0 格式)。 ISO 8601 日期字符串
注:GetAsyncResult 的返回值实质上是一个嵌套版本的标准 JSON 响应,外加一个状态字段。

请求示例

此方法的请求类似于以下示例:

{
  "method": "GetAsyncResult",
  "params": {
      "asyncHandle" : 389
},
"id" : 1
}

响应示例:方法错误

此方法返回类似于以下示例的响应:

{
   "error": {
      "code": 500,
      "message": "DBClient operation requested on a non-existent path at [/asyncresults/1]",
      "name": "xDBNoSuchPath"
   },
   "id": 1
}

如果“response”是 GetAsyncResult 调用返回的 JSON 响应对象,则“response.error”将对应于 GetAsyncResult 方法本身返回的错误(例如查询不存在的 asyncHandle)。

响应示例:异步任务错误

此方法返回类似于以下示例的响应:

{
   "id": 1,
   "result": {
     "createTime": "2016-01-01T02:05:53Z",
     "error": {
       "bvID": 1,
       "message": "Bulk volume job failed",
       "name": "xBulkVolumeScriptFailure",
       "volumeID": 34
     },
     "lastUpdateTime": "2016-01-21T02:06:56Z",
     "resultType": "BulkVolume",
     "status": "complete"
   }
}

“response.result.error”与来自原始方法调用的错误结果相对应。

响应示例:异步任务成功

此方法返回类似于以下示例的响应:

{
   "id": 1,
   "result": {
     "createTime": "2016-01-01T22:29:18Z",
     "lastUpdateTime": "2016-01-01T22:45:51Z",
     "result": {
       "cloneID": 25,
       "message": "Clone complete.",
       "volumeID": 47
     },
     "resultType": "Clone",
     "status": "complete"
   }
}

“response.result.result”是原始方法调用的返回值(如果该调用已成功完成)。