ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 非同期呼び出しフレームワーク (パート 2 - ユースケース設計)_JavaScript スキル

JavaScript 非同期呼び出しフレームワーク (パート 2 - ユースケース設計)_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:48:48894ブラウズ
コールバックの受け渡し
最初に考慮する必要があるのは、コールバック エントリを渡す方法です。最も伝統的な XHR 呼び出しでは、コールバック関数は最後のパラメーターとして非同期関数に渡されます。

function asyncOperation(argument, callback)

かなりの数のパラメータがある場合、パラメータを JSON に入れることができます。パラメータは名前付きパラメータと同様に、パラメータ名によって選択的に渡すことができます。渡されないパラメータはデフォルト値を使用することと同じです。これはプロトタイプ以来一般的なアプローチです:
コードをコピー コードは次のとおりです:

関数asyncOperation(argument, options)

ただし、どちらのアプローチにも欠点があります。つまり、同期関数を非同期関数 (または同期と非同期のハイブリッド関数) に変更する場合、関数のシグネチャは次のようにする必要があります。最後に 1 つ (または複数) のパラメータを追加します。

コールスタックの一番下に非同期関数を導入するのはあまりにも一般的であるため、多くの上位レベルの呼び出し関数のシグネチャを変更するコストが高すぎるため、私たちは依然として非同期関数を導入するものを考えています。関数の署名を行う方法を変更する必要はありません。

ここでは、非同期操作に関するすべての情報を 1 つのオブジェクトに集中させるための .NET Framework の IAsyncResult 設計を参照し、それによって関数シグネチャの変更を回避します。ここでは、非同期関数の呼び出しプロトタイプが次のようになっていると仮定します。
コードをコピー コードは次のとおりです。

function asyncOperation(argument) {
operation = new Async.Operation();
setTimeout(function() {operation.yield("hello world"); }, 1000); 🎜>return Operation;
}

このコードでは、今後コールバック関数を渡すための Operation オブジェクトを返します。同時に、setTimeout による非同期の戻り結果をシミュレートしました。具体的な戻りメソッドは yield メソッドです。

次に、コールバック関数を渡すメソッドも設計する必要があります。 C# のように = 演算子をオーバーロードできないため、関数を使用してコールバック関数を渡すことしかできません。

コードをコピー コードは次のとおりです。次のように:
varoperation = asyncOperation(argument);
operation.addCallback(function(result) {alert(result); }); C# でこのような設計は、コールバックが追加される前に非同期操作が完了する可能性があるため、安全ではありません。ただし、JavaScript でこのように記述することは安全です。JavaScript はシングルスレッドであり、asyncOperation の同期 addCallback が最初に実行され、asyncOperation の非同期 yield が後で実行される必要があるためです。

呼び出しシーケンス
ユーザーが同期メソッドを使用して yield を呼び出す場合、実行シーケンスは yield の実装に依存しますか? と尋ねたい人もいるかもしれません。そのとおりですが、yeild はフレームワーク内で一度実装されます。これを非同期にするだけで、同期的に呼び出されても実行シーケンスには影響しません:




コードをコピー
コードは次のとおりです。function psudoAsyncOperation(argument) { operation = new Async.Operation()
operation; .yield("hello world");
戻り操作;
}
var 操作 = asyncOperation(argument);
operation.addCallback(function(result) {alert(result); });


コードがこのように書かれていても、yield の実際のロジックの前に addCallback が確実に実行されるようにすることができます。

ポストイベント コールバック
場合によっては、フレームワークのユーザーが実際に最初に生成し、次に addCallback を生成するコードを作成する場合があります。このとき、addCallbackで追加したコールバック関数がすぐにトリガーされるようにする必要があると思います。ユーザーがこのコールバック関数を追加するということは、非同期操作の結果が得られたときにこのコールバック関数に通知することを期待していることを意味し、これはコールバック関数の追加時に非同期操作が完了するかどうかとは関係ありません。このために、別のユースケースを追加します:




コードをコピーします
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。