0

我正在使用 javascript 上传多个文件。

上传文件后,我需要运行几个处理函数。

由于需要处理时间,我需要在前面有一个 UI,告诉用户整个过程的估计剩余时间。

基本上我有3个功能:

  1. /upload - 这是上传文件的端点
  2. /generate/metadata - 这是应该在 /upload 之后触发的下一个端点
  3. /process - 这是最后一个端点。应该在 /generate/metadata 之后触发

这就是我期望屏幕基本上看起来的样子。

在此处输入图像描述

应显示剩余百分比和剩余时间等信息。

但是,我不确定是否允许服务器提供信息,或者我只使用 javascript 进行粗略估计。

我还需要更新屏幕,比如告诉用户消息,例如

“正在上传”

如果我在功能 1。

“生成元数据”,如果我在功能 2。

“处理中......”如果我在功能 3。

功能 2 仅在功能 1 成功完成后发生。

功能 3 仅在 2 成功完成后发生。

我已经在使用 q.js 承诺来处理其中的某些部分,但是代码变得非常混乱。

我最近遇到了 Backbone,它允许以结构化的方式来处理我想要的单页应用程序行为。

对于端点的成功或失败,服务器端返回 json 响应没有任何问题。

我想知道使用 Backbone.js 实现此功能的好方法是什么

4

2 回答 2

2

您可以使用存储后端进程状态的“进度”文件或数据库条目。让您的后端进程定期更新此文件。例如,将其写入文件:

{"status": "Generating metadata", "time": "3 mins left"}

用户提交文件后,前端progress使用简单的 ajax 调用和setTimeout开始 ping 后端函数。该progress函数将简单地打开此文件,获取 JSON 格式的状态信息,然后更新前端进度条。

您可能希望将 ajax 调用附加到您的模型。让您的前端视图注意更改status并相应更新(例如进度条)。

于 2013-03-02T05:59:08.373 回答
0

长轮询请求: 更新主干模型/视图的轮询请求

基本上,当您上传文件时,您将为每个给定文件分配一个“FileModel”。FileModel 将每隔 N 秒启动一次长轮询请求,直到获得“完成”状态。

于 2013-03-04T19:53:50.037 回答