2

私は1ページのアプリケーションに取り組んでいます。初めて、適切な1ページのアプリケーションを構築し、いくつかの落とし穴に遭遇しました。


各ページには、トリガーされる可能性のある一連の非同期操作があります。アクションには最大30秒かかる場合があります。

ユーザーがページを変更すると、完了時に非同期操作が失敗する可能性があります。

ページが変更されるたびにページのHTMLが再レンダリングされるため、DOM要素やその他のリソース/変数が欠落しているためにアクションが失敗します。また、状態の変化により、変数やその他のリソースが変化する可能性があります。

この種の問題に一般的にどのように対処しますか?


続行する前にチェックが行われるチェックポイントに分割されない限り、進行中のリクエストをキャンセルすることはほとんど不可能だと思います。

私はいくつかのオプションが次のようになると思います:

  1. active pageチェックで各関数を終了します。これは、望ましくない動作を防ぐために、各リソースと対話する前にチェックポイントで実行する必要があります。

  2. 例外をキャッチし、黙って失敗させます


何かご意見は?:)

4

2 に答える 2

1

イベントを使用しますか?リクエストをキャンセルしたいときにイベントを発行し、リクエストにイベントをリッスンさせ、その停止を適切に処理する準備を整えます。

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');

申し訳ありませんが、完全にきれいなコードではありませんが、わかりましたか?

于 2013-02-01T16:30:25.580 に答える
0
  1. 1 ページのアプリの場合、ユーザーはどのようにページを変更できますか?
  2. あらゆる UX の決定と同様に、フィードバックがすべてです。何が起こっているのかをユーザーに認識させる必要があります。ページが何らかのアクションを実行している間、ユーザーが移動し続けることができる場合は、他のアクションを実行すると変更が破棄されることをユーザーに警告するか、現在のアクションが完了するまで他のアクションを実行できないようにする必要があります。後者の場合、アクションの開始時にトリガーされ、アクションの完了時にクリアされる「処理中」フラグをコードに作成することは珍しくありません。こうすることで、ユーザーがアクションを中断するような他の対話を試みた場合、現在処理中のものがあるかどうかを確認することで、ユーザーの最新のアクションを完了する前にそれを処理できます。(上記の Zipp の例は、その戦術を示しています。)
于 2013-02-01T16:32:27.250 に答える