0

約束/遅延を作成する関数から直接アクセスできない関数で、jquery の約束を解決/拒否する方法を見つけようとしています。

シナリオは、要求が別のマシンに送信され、これに対する応答 (来る場合と来ない場合があります) が別の機能によって処理されるシナリオです。リクエストを送信するとすぐに、タイムアウト時に約束を拒否するタイマーを開始します。後でリモート マシンからの応答に基づいて約束を解決/拒否するために、この約束を send 要求と recv 応答 (応答が成功した場合に解決される) 関数の両方にアクセスできるようにします。リクエストを送信する機能は、複数のリクエストを送信しようとしますが、これは機能しません。

基本的に、呼び出し元のコードが複数のリクエストを送信しようとしても、そのリクエストが解決または拒否されるまで、一度に 1 つのリクエストのみを許可/処理したいと考えています。これを達成する方法についてのアイデアはありますか?

私がいたるところに聞こえる場合は申し訳ありませんが、このことはかなり新しいです。

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、Promise を返すようにリモート側を構成し、そのルーチンを呼び出して、ローカル側のハンドラー内からその値を返す必要があります。

 Promise
    .when (ready_for_remote_call)
    .then (function () {return remote_action_returning_promise ();})
    .then (
        function () {console.log("remote succeeded");},
        function () {console.log("remote failed");}
    )
;

これは次のように簡略化できることに注意してください。

    .then (remote_action_returning_promise)

これは完全に異なります

    .then (remote_action_returning_promise())

これは何の役にも立ちません。考えてみてください。

これは、頭を包み込むのが少し難しいプロミスの側面です。ハンドラーは promise を返すことができます。これは、いわば、promise チェーンに「挿入」されます。この仕様では、Promise が返された Promise の「状態を想定する」という表現を使用しています。具体的には、これは、返された promise が満たされている場合、呼び出し側の promise が満たされることを意味します。返された promise が拒否された場合、呼び出し側の promise は拒否されます。

つまり、リモート側が何らかの形でローカル側の約束を拒否しているとは考えないでください。これは、ハンドラーとして呼び出された場合にローカル側の promise がその状態になる promise を返すと考えてください。

于 2013-07-05T09:59:58.187 に答える