ホームページ >ウェブフロントエンド >jsチュートリアル >nodejs_node.js での Javascript Promise メカニズムの簡単な実装の例

nodejs_node.js での Javascript Promise メカニズムの簡単な実装の例

WBOY
WBOYオリジナル
2016-05-16 16:28:441570ブラウズ

Promise/deferred は、非同期呼び出しコーディングを処理するための優れた仕様です。以下では、nodejs コードをクラスとして使用して、promise/A 仕様の単純な実装を実装します。

コードをコピーします コードは次のとおりです:

/**
 * JetBrains WebStorm で作成されました。
 * ユーザー: xuwenmin
 *日付: 14-4-1
 * 時刻: 上午9:54
 * このテンプレートを変更するには、ファイル | を使用します。設定 |ファイルテンプレート。
 */

var EventEmitter = require('events').EventEmitter;
var http = require('http');
var util = require('util');
//Promise オブジェクトを定義します
var Promise = function(){
// 継承したイベントクラスを実装します
EventEmitter.call(this);
}
//イベント一般メソッドを継承
util.inherits(Promise, EventEmitter);
// then メソッドは、promise/A 仕様のメソッドです
Promise.prototype.then = function(successHandler, errorHandler, progressHandler){
If (typeof successHandler == '関数'){
This.once('success', successHandler);
}
If (errorHandler のタイプ === '関数'){
This.once('error', errorHandler);
}
If (progressHandler のタイプ === '関数'){
This.on('プロセス', progressHandler);
}
これを返してください;
}

//遅延オブジェクトを定義
//状態とプロミスオブジェクトが含まれます
var Deferred = function(){
This.state = '未履行';
This.promise = new Promise();
}
Deferred.prototype.resolve = function(obj){
This.state = '満たされました';
This.promise.emit('success', obj);
}
Deferred.prototype.reject = function(err){
This.state = '失敗';
This.promise.emit('error', err);
}
Deferred.prototype.progress = function(data){
This.promise.emit('プロセス', データ);
}

//http リクエストを使用して、上で定義した Promise/deferred を適用します

var client = function(){
var オプション = {
ホスト名:'www.baidu.com',
ポート:80、
パス:'/',
メソッド: 'get'
};
var deferred = new Deferred();
var req = http.request(オプション, 関数(res){
res.setEncoding('utf-8');
var data = '';
res.on('data', function(chunk){
データ = チャンク;
deferred.progress(chunk);
});
res.on('end', function(){
deferred.resolve(data);
});
});
req.on('エラー', function(err){
deferred.reject(err);
})
req.end();
deferred.promise を返します;
}
client().then(function(data){
console.log('リクエストが完了しました', データ);
}、関数(エラー){
Console.log('アクセスエラー', err);
}、関数(チャンク){
console.log('読み取り', チャンク);
});

コードはpromise.jsとして保存され、コマンドラインでノードpromise.jsを直接入力して実行結果を確認できます。

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