mirror of
https://github.com/nasa/openmct.git
synced 2025-05-31 22:50:49 +00:00
[Tables] Added timeouts to yield control to ui thread. Fixes #972
This commit is contained in:
parent
dc577d4c24
commit
d8a097a95a
@ -109,7 +109,7 @@ define([
|
|||||||
{
|
{
|
||||||
"key": "HistoricalTableController",
|
"key": "HistoricalTableController",
|
||||||
"implementation": HistoricalTableController,
|
"implementation": HistoricalTableController,
|
||||||
"depends": ["$scope", "telemetryHandler", "telemetryFormatter"]
|
"depends": ["$scope", "telemetryHandler", "telemetryFormatter", "$timeout", "$q"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "RealtimeTableController",
|
"key": "RealtimeTableController",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<div ng-controller="HistoricalTableController">
|
<div ng-controller="HistoricalTableController" ng-class="{'loading': loading}">
|
||||||
<mct-table
|
<mct-table
|
||||||
headers="headers"
|
headers="headers"
|
||||||
rows="rows"
|
rows="rows"
|
||||||
|
@ -35,12 +35,47 @@ define(
|
|||||||
* @param telemetryFormatter
|
* @param telemetryFormatter
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
function HistoricalTableController($scope, telemetryHandler, telemetryFormatter) {
|
function HistoricalTableController($scope, telemetryHandler, telemetryFormatter, $timeout, $q) {
|
||||||
|
this.$timeout = $timeout;
|
||||||
|
this.$q = $q;
|
||||||
TableController.call(this, $scope, telemetryHandler, telemetryFormatter);
|
TableController.call(this, $scope, telemetryHandler, telemetryFormatter);
|
||||||
|
$scope.loading = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoricalTableController.prototype = Object.create(TableController.prototype);
|
HistoricalTableController.prototype = Object.create(TableController.prototype);
|
||||||
|
|
||||||
|
function fastPromise(value) {
|
||||||
|
if (value && value.then) {
|
||||||
|
return value;
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
then: function (callback) {
|
||||||
|
return fastPromise(callback(value));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
HistoricalTableController.prototype.yieldingLoop = function (index, max, forEach, yieldAfter) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (index < max) {
|
||||||
|
forEach(index);
|
||||||
|
if (index % yieldAfter === 0) {
|
||||||
|
return this.$timeout(function () {
|
||||||
|
return self.yieldingLoop(++index, max, forEach, yieldAfter);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return self.yieldingLoop(++index, max, forEach, yieldAfter);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return this.$q.when(undefined);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates historical data on scope when it becomes available from
|
* Populates historical data on scope when it becomes available from
|
||||||
* the telemetry API
|
* the telemetry API
|
||||||
@ -49,18 +84,27 @@ define(
|
|||||||
var rowData = [],
|
var rowData = [],
|
||||||
self = this;
|
self = this;
|
||||||
|
|
||||||
this.handle.getTelemetryObjects().forEach(function (telemetryObject) {
|
this.$scope.loading = true;
|
||||||
|
|
||||||
|
function processTelemetryObject(telemetryObject) {
|
||||||
var series = self.handle.getSeries(telemetryObject) || {},
|
var series = self.handle.getSeries(telemetryObject) || {},
|
||||||
pointCount = series.getPointCount ? series.getPointCount() : 0,
|
pointCount = series.getPointCount ? series.getPointCount() : 0,
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
for (; i < pointCount; i++) {
|
return self.yieldingLoop(i, pointCount, function (index) {
|
||||||
rowData.push(self.table.getRowValues(telemetryObject,
|
rowData.push(self.table.getRowValues(telemetryObject,
|
||||||
self.handle.makeDatum(telemetryObject, series, i)));
|
self.handle.makeDatum(telemetryObject, series, index)));
|
||||||
}
|
}, 1000);
|
||||||
});
|
}
|
||||||
|
|
||||||
this.$scope.rows = rowData;
|
this.handle.getTelemetryObjects().reduce(function (promise, telemetryObject) {
|
||||||
|
return promise.then(function () {
|
||||||
|
return processTelemetryObject(telemetryObject);
|
||||||
|
});
|
||||||
|
}, self.$q.when(undefined)).then(function () {
|
||||||
|
self.$scope.rows = rowData;
|
||||||
|
self.$scope.loading = false;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return HistoricalTableController;
|
return HistoricalTableController;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user