いくつかの http リクエストを実行する必要があります。各リクエストがJSON object
配列にプッシュされると、URLの配列があります。すべてのリクエストが終了するJSON object
と、 が新しく構築された とともにクライアントに送信されArray
ます。私がこのクライアント側でやっていたら、jQuery
の Deferred オブジェクトのようなものを使うでしょう。node.js
必要なく使用する別のアプローチはありimport jQuery's Deferred object
ますか? これを処理するためにイベントエミッターが使用されるようには見えません。それとも?ありがとう!
2 に答える
0
これが可能な解決策です。
このクラスは EventEmitter を拡張します。それが行うことは、すべての非同期リクエスト応答に対して、完了した非同期リクエストの数を発行し、応答の本文を保存することです。
var UrlHandler, events, request, urlHandler,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
events = require("events");
request = require("request");
UrlHandler = (function(_super) {
__extends(UrlHandler, _super);
function UrlHandler() {
return UrlHandler.__super__.constructor.apply(this, arguments);
}
UrlHandler.prototype.getUrls = function(urls) {
var processedUrls, url, urlhandler, _i, _len, _results;
processedUrls = 0;
urlhandler = this;
urlhandler.urlResponse = [];
_results = [];
for (_i = 0, _len = urls.length; _i < _len; _i++) {
url = urls[_i];
_results.push(request({
uri: url
}, function(error, response, body) {
urlhandler.urlResponse.push(response);
processedUrls++;
return urlhandler.emit("processed:" + processedUrls);
}));
}
return _results;
};
return UrlHandler;
})(events.EventEmitter);
urlHandler = new UrlHandler();
module.exports = {
urlHandler: urlHandler
};
次に、メイン アプリにリスナーを配置して'processed:' + urls.length
、すべての非同期リクエストが完了するとトリガーされるようにします。
urls = ['http://stackoverflow.com/questions/12739605/how-to-perform-several-http-requests-with-node-js', 'http://stackoverflow.com'];
UrlHandler.getUrls(urls);
UrlHandler.once("processed:" + urls.length, function() {
return res.json(UrlHandler.urlResponse);
});
于 2012-10-05T06:15:01.943 に答える