java - web端百度网盘的一个操作为什么要分两次请求服务器, 有什么好处吗
迷茫
迷茫 2017-04-18 10:48:35
0
3
895

以 文件重命名 为例:

  • 当完成重命名操作提交会到这个地址
    https://pan.baidu.com/api/filemanager

返回如下结果

{
  "errno": 0,
  "info": [],
  "request_id": 88137407060055336,
  "taskid": 307843054247316
}

可以联想到在server端建立了一个task, 并返回了taskid让客户端后续取状态来更新ui

  • 客户端轮训服务器的接口 https://pan.baidu.com/share/taskquery 来获取状态, 1秒一次请求, 服务器端返回结果如下: 分几种情况我总结了一下

#进行中的返回值
{
  "errno": 0,
  "request_id": 88137707954758994,
  "task_errno": 0,
  "status": "pending"
}

#进行中
{
  "errno": 0,
  "request_id": 88137707954758994,
  "task_errno": 0,
  "status": "running"
}


#操作成功的返回值
{
  "errno": 0,
  "request_id": 88138584419582326,
  "task_errno": 0,
  "status": "success",
  "list": [
    {
      "from": "/test1/我的照片",
      "to": "/test1/我的照片2"
    }
  ],
  "total": 1
}

当 status 为success时候, 则轮询结束, 更新UI元素

问题: 直接访问重命名接口不行吗? 为什么要这么设计, 好处是什么?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(3)
伊谢尔伦

他に何かわからないことはありますか?

最初は、サーバーへの名前変更アプリケーションを開始します。
サーバーがタスクを開始します。
その後のポーリングはタスクが完了したかどうかを確認するためのもので、完了後にフロントエンドは対応する操作を実行し、失敗した場合にはロールバック操作も実行します。

いいねを押す +0
Ty80

理由を推測してください: 極端な場合、操作に時間がかかり、操作が完了してもソケット リンクが切断され、最終結果を取得できない可能性があります。最終結果が得られることを保証します。

いいねを押す +0
PHPzhong

上記の考慮事項に加えて、別の非常に重要な理由がある可能性があります。それは同時実行の圧力です。非同期に作られているため、同時実行性を非常にうまく解決できます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート