mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
further consolidate queue code, wrap all of fetch in a promise chain for error handling
This commit is contained in:
parent
beedf7b158
commit
952fe5970c
2 changed files with 29 additions and 19 deletions
|
@ -71,12 +71,19 @@ define(function (require) {
|
|||
return this.searchPromise;
|
||||
};
|
||||
|
||||
segmentedFetch.prototype._getQueue = function () {
|
||||
var queue = this.searchSource.get('index').toIndexList();
|
||||
segmentedFetch.prototype._extractQueue = function (direction) {
|
||||
var self = this;
|
||||
var queue = self.searchSource.get('index').toIndexList();
|
||||
|
||||
if (!_.isArray(queue)) {
|
||||
queue = [queue];
|
||||
}
|
||||
return queue;
|
||||
|
||||
if (direction === 'desc') {
|
||||
queue = queue.reverse();
|
||||
}
|
||||
|
||||
self.queue = queue;
|
||||
};
|
||||
|
||||
segmentedFetch.prototype._createRequest = function () {
|
||||
|
@ -87,7 +94,7 @@ define(function (require) {
|
|||
return req;
|
||||
};
|
||||
|
||||
segmentedFetch.prototype._processQueue = function (req, queue, opts) {
|
||||
segmentedFetch.prototype._processQueue = function (req, opts) {
|
||||
var self = this;
|
||||
var active = null;
|
||||
var complete = [];
|
||||
|
@ -112,9 +119,9 @@ define(function (require) {
|
|||
function reportStatus() {
|
||||
if (!opts.status) return;
|
||||
opts.status({
|
||||
total: queue.length,
|
||||
total: self.queue.length,
|
||||
complete: complete.length,
|
||||
remaining: queue.length,
|
||||
remaining: self.queue.length,
|
||||
active: active
|
||||
});
|
||||
}
|
||||
|
@ -124,7 +131,7 @@ define(function (require) {
|
|||
searchStrategy.getSourceStateFromRequest(req)
|
||||
.then(function (state) {
|
||||
return (function recurse() {
|
||||
var index = queue.shift();
|
||||
var index = self.queue.shift();
|
||||
active = index;
|
||||
|
||||
reportStatus();
|
||||
|
@ -142,7 +149,7 @@ define(function (require) {
|
|||
|
||||
// a response was swallowed intentionally. Try the next one
|
||||
if (!resp) {
|
||||
if (queue.length) return recurse();
|
||||
if (self.queue.length) return recurse();
|
||||
else return done();
|
||||
}
|
||||
|
||||
|
@ -182,7 +189,7 @@ define(function (require) {
|
|||
})
|
||||
.then(function () {
|
||||
complete.push(index);
|
||||
if (queue.length) return recurse();
|
||||
if (self.queue.length) return recurse();
|
||||
return done();
|
||||
});
|
||||
});
|
||||
|
@ -233,19 +240,21 @@ define(function (require) {
|
|||
*/
|
||||
segmentedFetch.prototype.fetch = function (opts) {
|
||||
var self = this;
|
||||
var req;
|
||||
opts = opts || {};
|
||||
var direction = opts.direction;
|
||||
var queue = self._getQueue();
|
||||
|
||||
if (direction === 'desc') {
|
||||
queue = queue.reverse();
|
||||
}
|
||||
|
||||
var req = self._createRequest();
|
||||
|
||||
return self._startRequest(req)
|
||||
return Promise.try(function () {
|
||||
self._extractQueue(opts.direction);
|
||||
})
|
||||
.then(function () {
|
||||
self._processQueue(req, queue, opts);
|
||||
req = self._createRequest();
|
||||
return req;
|
||||
})
|
||||
.then(function (req) {
|
||||
self._startRequest(req);
|
||||
})
|
||||
.then(function () {
|
||||
self._processQueue(req, opts);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ define(function (require) {
|
|||
|
||||
describe('fetch', function () {
|
||||
it('should return a promise', function () {
|
||||
SegmentedFetch.prototype._startRequest = Promise.resolve;
|
||||
SegmentedFetch.prototype._processQueue = Promise.resolve;
|
||||
|
||||
var fetch = segmentedFetch.fetch();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue