4

基礎となるメカニズムをよりよく理解するために、フラックス設計の原則を使用して簡単なアプリケーションを作成しています。強化されたエクスペリエンスを提供するために、ユーザーの変更はローカル ストアにすぐに記録されるため、ゼロ レイテンシーでインターフェイスが更新されます。同時に、非同期リクエストがサーバーにディスパッチされます。サーバーに障害が発生した場合、ローカル ストアはサーバーから再ロードされます。

ただし、サーバーの応答が遅いために複数の非同期要求が保留されているシナリオを処理する最善の方法がわかりません。このようなシナリオでは、障害への対処ははるかに複雑に見えます。たとえば、保留中の非同期リクエストが 3 つあるとします (ユーザー インタラクションを変更する状態ごとに 1 つ)。最初は成功しますが、2 番目は失敗します。3 番目の要求をキャンセルする必要がありますか? 3 番目のリクエストではなく、2 番目のリクエストからの変更をロールバックするにはどうすればよいですか。

できればこの種の複雑さは避けたいと思います。フラックスはそのようなシナリオに対処するメカニズムを提供しますか? 複数のリクエストがキューに入るのを防ぐために、非同期リクエストが保留されている間に UI をロックできることはわかっていますが、そのようなアプローチのユーザー エクスペリエンスの低下を紹介するのは嫌です。

編集: 複数の非同期呼び出しの問題がフラックスに固有のものであるかどうかについて、かなり疑問視する人もいます。私が言及しなかったのは、私の懸念は、ストア/ディスパッチャーが同期コードのみを実行する というガイダンスに固有のものであるということです。

4

2 に答える 2

0

さて、さまざまな質問をしています。1 つ目は状態の変更履歴を管理する方法であり、2 つ目は障害を処理する方法です。

状態の変更履歴を管理する方法

Facebook は、このような問題に対する解決策を提供していません。Flux は単なるアーキテクチャであり、ライブラリやフレームワークではありません。しかし、それは何度も解決されてきた古い問題です。基本的なアプローチは、状態に操作を適用することによってのみ状態を変更でき、各操作をキャンセルまたは元に戻す可能性があるということです。これにはRx-Fluxを使用できますが(ただし、まだ完成していません)、元に戻す/やり直しライブラリが必要な機能を提供する場合があります。

失敗の対処法

このような一般的な例に対する一般的な解決策はありません。失敗した操作を単に飲み込んで忘れることができる場合もあれば、成功するまで操作を再試行する必要がある場合もあれば、問題を解決するために何らかのアクションを実行するようユーザーに依頼する必要がある場合もあります。テンポの速いゲームには 1 つのソリューションがあり、インターネット バンキングには別のソリューションがあります。

于 2014-12-26T08:49:57.793 に答える