2011-11-16 22 views
0

私はサードパーティのライブラリを扱うときに簡単にできる小さなjavascriptフレームワークを作成しようとしています。たとえば、あなたがコードを使用し、接続を確立するように、このライブラリは、主に非同期です:非同期要求のカプセル化

var com = establishConnection("api-key"); 
com.onsuccess = function(c) { 
    c.submit("something"); 
}; 

私が欲しいのは、単に

var com = establishConnection("api-key"); 
com.submit("something"); 
を行うことができるように私のラッパーのフレームワークを使用することができることです

明らかに、元のライブラリの非同期性を扱う方法が必要ですが、コマンドを実行する前に接続が確立されるまで待つことになります。誰もが何かアドバイスを持っています、私は

function submit(msg) { 
    while (!connectionEstablished) {} 
    // do submit stuff 
} 

すなわち

、接続が確立されているかどうかと言うと、遅延をループのいくつかの種類を使用するようにフラグを設定するような何かを行うことができます知っているが、それは、そのような醜いハックのように思えますこれを行うためのより良い方法のために?

答えて

0

これは、非同期要求を同期要求に変換する唯一の方法です。

はい、恐ろしく、醜いです。ですのでです。

私はのとあなたのライブラリーのうちの中いっぱいを知らないけど、私はあなた(とあなたのユーザーが)非同期要求を受け入れるのではなくマスクそれらをしようとしなければならないことをお勧め。 HTTPリクエストはJavaScriptで非同期に動作します。彼らはブラウザをロックアップしません。同期要求は、要求の間ブラウザを完全にロックします。注意が必要でない場合、HTTPリクエストが長すぎると、ほとんどのブラウザで、スクリプトの実行が停止したという警告が表示されます。スクリプトを無効にするオプションを提供します。

+0

ええ、残念ながら、私は非同期性を隠蔽しなければならない点がいくつかあり、より良いソリューションを望んでいました。ほとんどの場合、非同期リクエストはかなり速く、ローカルサーバーを介して実行されますが、私がマスクする動作を選択するだけで、完全に必要なときのみブロックすることができます。ありがとう –

関連する問題