0

callback私のアプリケーションは複雑なデータベース アーキテクチャに支えられており、外部キーの制限が厳しく、JavaScript がハンドラーでいっぱいになっています。新しい注文の作成などの単一のアクションの場合、処理に必要なすべてのデータを送信するために 3 つの XHR が必要になる場合があります。

現在、私はこれをかなり不謹慎であるか、少なくとも少しずさんな手段で処理しています...

/** -- PSEUDO CODE -- */
myOrder.save({
    success: function()
    {
         /** This request handled inserting the main attributes of the model
             into the database, which means it is safe to fire off additional
             requests */
         myOrderContents.store.sync({
                success: function()
                {
                    /** Possibly fire another request here, that is dependent on
                        the first two requests returning successfully, or maybe
                        execute code that is also dependent on these requests.
                      */
                }
         });
    },
    failure: function()
    {
    /** Handle Failure Here */
    }
});

別の実行可能なアプローチは、1 つのコールバック メソッドを呼び出すすべてのリクエストの行に沿ったものであり、特定のコードのチャンクのみを実行することになると思います....

myOrder.save({callback: executeAfterRequests});
myOrderContents.store.sync({callback: executeAfterRequests});
myOtherObject.save({callback: executeAfterRequests});

executeAfterRequests: function()
{
    if(requestA.isComplete() && requestB.isComplete() && requestC.isComplete())
    {
    /** Execute some code after all requests have been completed... */
    }
}

ExtJS 開発者が同期要求に強く反対していることを考えると、基本 AJAX クラスを拡張してキューを実装するのが私の最善の策ですか? それとも、AJAX の性質を受け入れて、ネストされたsuccess機能を使って私の楽しい方法を続けますか?

ご意見ありがとうございます。

4

2 に答える 2

1

必要なすべてのデータを一緒にサーバーに送信してみませんか? サーバー上で段階的にレコードを作成し、すべてが完了したら戻ることができます。画面ごとにデータを収集する長いプロセスをユーザーに案内し、最後にすべてを送信するフォーム ウィザードの例があります。

于 2012-11-09T05:26:56.187 に答える
0

はい、関数を入れることができ、それらを次々にラップして実行するキューヘルパーを使用します。

おそらく、利用可能なツールを調べて、そのうちの1つがニーズに合っているかどうかを確認する必要があります.明らかそれらのいくつかがあります. 残念ながら、それらのどれもまだ標準的な手法として受け入れられていないと思います.

于 2012-11-08T21:40:07.397 に答える