跳到正文

持久操作与故障恢复

区分普通调用、Task 和持久 Operation,安全恢复拍照、上传与业务写入。

类型 典型入口 如何确认完成
普通调用 storage.get()、files.stat() 等待 Promise 返回。
Task http.request()、files.download() 等待 task.result。subscribe() 仅提供字节进度。
Operation camera.capture()、recording.start()、files.upload()、operations.enqueue() 等待 operation.result() 或读取 operation.get() 返回的快照。

保存意图再发起

  1. 用户明确操作后,生成唯一的 idempotencyKey,保存键和固定请求内容。用存储修订号或提交锁防止重复发起。
  2. 提交时使用原键和原内容。Host 以应用、操作类型和键识别同一意图。同键内容改变会被拒绝。
  3. 收到句柄时保存 operation.id。收到句柄只代表可以查询该操作。界面应按已知的 pending、running、succeeded、failed 或 cancelled 状态呈现结果。

恢复原操作

重开应用时,有 ID 用 glass.operations.get(id),没有 ID 用 glass.operations.find(type, idempotencyKey)。已知 ID 也可用 glass.operations.open(id) 获取句柄。快照事件可加快界面更新,恢复时仍主动查询。

调用超时、连接中断、查询为空或 RESULT_UNKNOWN 时,保留原意图供用户继续查询和排查。特别是 failed 快照携带 RESULT_UNKNOWN 时,仍按结果未知处理。避免换键重新拍照、上传或写入。保存失败、权限不足等已明确失败的情况,处理具体原因后由用户决定下一步。

operation.result() 默认轮询间隔 750 毫秒,最长等待 60 秒。取消本地等待只结束调用方等待。原生取消是否支持由返回状态决定。录像结束使用针对原操作 ID 的 recording.stop(),之后查询原操作确认最终文件。HTTP 写入的持久操作完成时还要检查响应状态与业务字段。

完整示例见 拍照并恢复结果。

输入关键词

↑↓ 切换↵ 打开Esc 关闭