2

我正在开发一个单页应用程序。我第一次构建适当的单页应用程序并遇到一些问题。


每个页面都有一组可以触发的异步操作。这些操作最多可能需要 30 秒。

用户很可能会更改页面,从而导致异步操作在完成后失败。

每次页面更改时都会重新呈现页面 HTML,因此由于缺少 DOM 元素和/或其他资源/变量而导致操作失败。由于状态的变化,变量和其他资源也可能发生变化。

您一般如何处理此类问题?


我相信取消正在进行的请求几乎是不可能的,除非它被分成检查点,在继续之前进行检查。

我想一些选择是:

  1. 以检查结束每个功能active page。这必须在与每个资源交互之前在检查点完成,以防止不必要的行为。

  2. 捕获异常并让它们静默失败


有什么想法吗?:)

4

2 回答 2

1

Use events? Emit an event when you want to cancel the request, and have the request listen for the event / be ready to handle its stop gracefully.

function Potato {
  this.running = true;
}

Potato.prototype.stop = function () {
  this.running = false;
}

Potato.prototype.dostuff = function () {
  var things = [1, 2, 3];

  Object.keys(things).forEach(function(k) {
    if (!this.running) {
      break;
    }
    console.log(k);
  });
}

var potato = new Potato;
potato.on('stop', potato.stop);
this.emit('stop');

Sorry, not exactly clean code, but you get the idea?

于 2013-02-01T16:30:25.580 回答
0
  1. 如果是单页应用程序,用户如何更改页面?
  2. 与任何 UX 决策一样,这都是关于反馈的……您必须让用户了解正在发生的事情。如果用户可以在页面执行某些操作时继续移动,那么您需要提醒用户执行其他操作将放弃他们所做的更改,或者阻止他们执行其他操作,直到当前操作完成。如果是后者,在代码中创建一个“处理”标志并不少见,该标志在动作开始时被触发,并在动作完成时被清除。这样,如果用户尝试其他会中断操作的交互,您可以在允许用户的最新操作完成之前通过检查当前是否正在处理任何内容来处理它。(上面 Zipp 的例子说明了这种策略。)
于 2013-02-01T16:32:27.250 回答