libzotero
Version:
javascript libZotero
66 lines (51 loc) • 1.39 kB
JavaScript
;
var log = require('./Log.js').Logger('libZotero:Fetcher');
var Fetcher = function Fetcher() {
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var defaultConfig = {
start: 0,
limit: 25
};
this.config = Z.extend({}, defaultConfig, config);
this.hasMore = true;
this.results = [];
this.totalResults = null;
this.resultInfo = {};
};
Fetcher.prototype.next = function () {
var _this = this;
if (this.hasMore == false) {
return Promise.resolve(null);
}
var urlconfig = Z.extend({}, this.config);
var p = Zotero.net.queueRequest({ url: urlconfig });
p.then(function (response) {
if (response.parsedLinks.hasOwnProperty('next')) {
_this.hasMore = true;
} else {
_this.hasMore = false;
}
_this.results = _this.results.concat(response.data);
_this.totalResults = response.totalResults;
return response;
});
var nconfig = Z.extend({}, urlconfig);
nconfig.start = nconfig.start + nconfig.limit;
this.config = nconfig;
return p;
};
Fetcher.prototype.fetchAll = function () {
var _this2 = this;
var results = [];
var tryNext = function tryNext() {
if (_this2.hasMore) {
return _this2.next().then(function (response) {
results = results.concat(response.data);
}).then(tryNext);
} else {
return Promise.resolve(results);
}
};
return tryNext();
};
module.exports = Fetcher;