ホームページ >ウェブフロントエンド >jsチュートリアル >node.js_node.js での when.js の非同期プログラミングの実践
ビジネス シナリオを想定します:
RSS アドレスから RSS を取得し、ファイルに保存すると、RSS アドレスがファイルに保存されます。
このシナリオのビジネスを完了するには、3 つのタスクを完了する必要があります:
1. ファイルから RSS アドレスを読み取ります。
2. RSSを取得します。
3. ファイルに保存します。
最後に、これら 3 つのタスクを統合します。
準備:
RSS アドレスを保存するファイル、address.txt。
http://programmer.csdn.net/rss_programmer.html
タスク 1:
RSS アドレス ファイルの内容を読み取り、コールバックを通じて返します。
ミッション 2:
RSS アドレスを通じて RSS を取得し、コールバックを通じてエラーまたはデータを返します。
ミッション 3:
RSS をファイルに保存し、コールバックを通じてエラーを返します。
統合:
上記のコードは、最も一般的なコールバックを使用して非同期ロジックの戻りを処理する完全な非同期処理です。利点は、誰もが簡単に受け入れられる標準的な記述方法であることです。欠点は、結合が強すぎることです。例外の処理は面倒で、コードは直感的ではありません。特に複雑なビジネス ロジックや複数の処理タスクを扱う場合、コールバックの層が人々の目を眩ませる可能性があり、コードの保守が困難になります。
Promise/A 仕様の実装の 1 つであるwhen.js は、この問題領域を対象としています。
変換されたコードを見てみましょう。
ミッション 1:
return deferred.promise;
}
return deferred.promise;
}
任务3:
return deferred.promise;
}
統合:
解释:
promise/A 定義の「Deferred/Promise」モデルは、「発行/承認者」モデルであり、Deferred オブジェクトを介して配布イベントを実行することも、完了解決イベントであることも、失敗拒否イベントであることもできます。Promise オブジェクトを介して完了または失敗を実行することもできます
約束/A 承認では、各仕事には 3 つの状態があります: 承認 (保留中)、完了 (履行)、失敗 (拒否)。
1. 承認状態は完了状態に一方的に移行でき、この手順は解決されます。対応するメソッドは deferred.resolve(promiseOrValue) です。2. 承認状態は失効状態に一方的に移行することもでき、この手続きは拒否され、対応方法は deferred.reject(reason) です。
3. 承認状態の場合、deferred.notify(update) を介して宣告任务行情報、例として実行することもできます。
4. 状態の移行は 1 回限りであり、最初の保留中のタスクが他の状態に移行すると、次のタスクの実行プロセスに入ります。
上記のコードを参照してください。
when.defer によって遅延オブジェクトが 1 つ定義されます。
var deferred = when.defer();
データの取得に成功すると、完了イベントが送信されます。deferred.resolve(data);
データの取得が失われると、損失イベントが送信されます。
そして、承認として使用される Promise オブジェクトを返します。
return deferred.promise;
は、Promise オブジェクトの then メソッドによって完了/失効/通知を実行する承認です。
getRssAddress('address.txt')
次に、3 つのパラメータがあり、それぞれ onFulfilled、onRejected、onProgress
になります。
上のタスクは resolve(data) され、onFulfilled 関数がトリガーされ、data がパラメータとして使用されます。
上のジョブが拒否されました (理由)。拒否された場合は理由が通知されます。
頻繁に処理する場合、.js もその便利な方法を提供しており、複数のタスクが連続して実行されるときに、最後の 1 つの時点でのみ拒否を設定できます。 catch 関数は、任意のジョブの例外を捕捉します。
このように書き込み方法は完了しました。
复制代
代码如下: