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

JavaScript 非同期呼び出しフレームワーク (パート 5 - チェーン実装)_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:48:431022ブラウズ
呼び出しエントリ
チェーン呼び出しには、Async.go メソッドと Async.chain メソッドという 2 つのエントリがあります。ただし、Async.chain メソッドは呼び出し時に初期化を提供しない点が異なります。一方、Async.go メソッドは呼び出されたときに初期パラメーターを提供し、非同期呼び出しチェーンを開始します。
コードをコピーします コードは次のとおりです。

Async.chain = function() {
varchain = new Async.Operation({chain: true });
returnchain;
};
Async.go = function(initialArgument) {
return Async.chain(). go(initialArgument );
}

ここでは、チェーン呼び出し自体も Async.Operation であることがわかります。チェーン呼び出しに必要な go メソッドと next メソッドは両方とも Async です。この拡張は次のセクションで説明するように難しいものではありません。
拡張メソッド
addCallback メソッドを通じて追加されたコールバック関数は、少なくとも同期関数については 1 つずつ実行されることは誰もが知っているので、Async.Operation のこの機能を使用して非同期呼び出しキューを維持できます。ただし、非同期呼び出しをキューに入れるためのサポートを追加しました。
非同期呼び出しキューのサポートについては、後ほど説明します。まず、既製の addCallback メソッドと yield メソッドを使用して、go メソッドと next メソッドを拡張します。
コードをコピー コードは次のとおりです。

this.go = function(initialArgument) {
return this.yield(initialArgument);
}
this.next = function(nextFunction) {
return this.addCallback(nextFunction);

実際 上記では、 go メソッドと next メソッドが直接 yield メソッドと addCallback メソッドを呼び出しています。 go メソッドのセマンティクスは yield メソッドと同じで、パラメーターを Async.Operation インスタンスに渡し、呼び出しキューを開始します。同時に、next メソッドと addCallback メソッドのセマンティクスにより、呼び出しがキューの最後に追加されます。

非同期キュー 元々同期のみをサポートするキューが、どのようにして非同期キューもサポートできるのでしょうか?これには、キュー内の各呼び出しの戻りを検出する必要があります。戻りのタイプが Async.Operation の場合、それが非同期呼び出しであることがわかるため、実行する前に完了するまで待機する特別なメソッドを使用できます。

コードをコピー コードは次のとおりです。
callbackResult = callback(self.result);
self.result = callbackResult;
if (callbackResult && callbackResult インスタンス of Async.Operation) {
innerChain = Async.chain();
while (callbackQueue.length > 0) {
innerChain.next (callbackQueue.shift());
}
innerChain.next(function(result) {
self.result = result;
self.state = "完了";
self.completed = true;
return result;
});
callbackResult.addCallback(function(result) {
self.result = result;
innerChain.go(result); 🎜>} );
}


呼び出しが Async.Operation インスタンスを返す場合、独自の addCallback メソッドを使用して、キュー内の残りの呼び出しを実行します。正確に言うと、新しい呼び出しチェーンを構築し、キュー内の残りの呼び出しを新しい呼び出しチェーンに転送して、現在の非同期呼び出しによってコールバック内のこの新しい呼び出しチェーンを開始させます。
さらに、新しい非同期呼び出しキューと互換性を持たせるために、若干の変更を加える必要がある場所がいくつかあります。たとえば、連鎖呼び出しでは、result、state、completed のステータス変化が異なります。

概要
非同期呼び出しキューをサポートするために、元の Async.Operation を少し変更しました。完全なコードは、チェーン呼び出しをサポートする非同期呼び出しフレームワークである Async.Operation を参照してください。 強力な Async.Operation ができたので、それをより一般的な使用パターンに組み込む方法を見てみましょう
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。