Skip to content

Instantly share code, notes, and snippets.

@niusounds
Created September 25, 2014 04:55
Show Gist options
  • Select an option

  • Save niusounds/2e51b0f67ff35cd9ee5b to your computer and use it in GitHub Desktop.

Select an option

Save niusounds/2e51b0f67ff35cd9ee5b to your computer and use it in GitHub Desktop.
QueuedRequest
var request = require('request'),
Promise = require('promise'),
extend = require('extend');
module.exports = QueuedRequest;
function QueuedRequest(interval) {
this.interval = interval;
this.queue = [];
this.loop = loop.bind(this);
}
QueuedRequest.prototype = {
start: function() {
this.timerId = setTimeout(this.loop, this.interval);
},
stop: function() {
clearTimeout(this.timerId);
delete this.timerId;
},
isRunning: function() {
return !!this.timerId;
},
get: function(url, query) {
var queue = this.queue;
return new Promise(function(resolve, reject) {
queue.push({
url: url,
query: query,
resolve: resolve,
reject: reject
});
console.log(queue);
});
}
};
function loop() {
// リクエストキューから取り出し、なければ何もしない
var queued = this.queue.shift();
if (!queued) return this.start();
var self = this;
// リクエストを実行して結果を返す
requestPromise(queued.url, queued.query).then(function(result) {
queued.resolve(result);
self.start();
}, function(err) {
queued.reject(err);
self.start();
});
}
function requestPromise(url, query) {
return new Promise(function(resolve, reject) {
request(url, {
qs: query
}, function(err, response, data) {
if (err)
reject(err);
else
resolve(data);
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment