Web ページ上のインタラクションはますます複雑になり、JavaScript の非同期操作がますます増えています。たとえば、一般的な ajax リクエストは、リクエストが完了するときに応答操作を必要とします。リクエストのプロセス中、ユーザーはページをブロックせずに他の操作を実行することもできます。フレンドリー。しかし、開発者にとって、この種の操作を大量に処理することは非常に不親切です。非同期リクエストによって完了する操作はコールバック関数で事前定義する必要があり、リクエストの完了時にこの関数を呼び出す必要があります。この非線形非同期プログラミング手法は、開発者を非常に不快にさせるだけでなく、多くの不便をもたらし、コードの結合と複雑さが増大し、コードの構成も非常に洗練されなくなり、コードの効率が大幅に低下します。保守性。状況はさらに複雑で、操作を実行する前に複数の非同期 Ajax リクエストが完了するまで待機する必要がある場合、コールバック関数のネストが発生します。複数のレベルをネストする必要がある場合は、祝福を求めるしかありません。
次の一般的な非同期関数を見てみましょう。
関数にコールバックを追加したい場合は、通常これを行います。
easy.js の Promise を使用する場合、元の関数を Promise インスタンスにカプセル化する必要がある場合、コールバックを追加する方法はより洗練されます。
コードは次のとおりです。
then メソッドは 2 つの関数をパラメーターとして受け取ります。最初の関数は完了したコールバックで、2 番目の関数は失敗したコールバックです。
上記の ajax リクエストが複数ある場合はどうなりますか?次に、 when メソッドを使用する必要があります。このメソッドは、複数の Promise インスタンスをパラメータとして受け入れることができます。
requests.then(function( arg1, arg2 ){
console.log( 'success:' arg1[0] arg2[0] );
}, function( arg1, arg2 ){
console.log( '失敗:' arg1 arg2 );
});
when メソッドは、複数の Promise インスタンスを配列に格納し、配列内のすべての Promise インスタンスが完了するまで待機してから、1 つのインスタンスが拒否された場合、そのインスタンスを直ちに実行します。
PromiseパターンはCommonJSの仕様の一つです。多くの主流の JavaScript ライブラリには、jQuery や Dojo などの対応する実装があり、これらの関数の実装は Deferred になっています。ここで私はやはり jQuery の Deferred について文句を言いたいのですが、内部での使用に関係なく、このモジュールはユーザーによる使用率が最も低いモジュールである必要があります。これはより複雑な使用法と一定の関係があります。