Я пытался заставить этот кусок кода работать некоторое время, и я просто не могу его получить. Он предназначен для динамически обновляемого графа, который принимает массив [x, y] для каждой точки, поэтому массив массивов.
Входные данные представляют собой список JSON
, поступающий с сервера, который обновляет тот же самый объект JSON
(поэтому он меняет один JSON
и обновляет только значение):
[
{
"Value": 10,
"Name": "Name of variable"
}
]
Мне нужно только извлечь значение.
Я попробовал это так:
var getValueData = async function() {
var valueJSON = await Promise.resolve($.getJSON( "{% url 'get_value' %}" ));
return valueJSON[0]['Value'];
};
var data = [];
var totalPoints = 100;
var updateInterval = 1000;
var now = new Date().getTime();
function getData() {
data.shift();
while (data.length < totalPoints) {
var value = [now += updateInterval,
getValueData().then(function(result) {
result;
})
];
data.push(value);
};
};
По сути, getData()
пытается создать массив из X = timestamp.now()
и Y = "Value"
из JSON
, а затем вставить этот массив в мой "overall"
массив данных.
Делая это таким образом, value
становится массивом [<timestamp>, Unresolved]
.
Делаем так:
while (data.length < totalPoints) {
getZScoreData().then(function (result) {
var valueArray = [now += updateInterval, result];
data.push(valueArray);
});
};
Делает valueArray
фактическим [<timestamp>, <JSON "value"]
, если я console.log(value)
, за исключением этого, кажется, что сервер зависает навсегда и потребляет огромное количество оперативной памяти для вкладки, как если бы я делал бесконечный цикл (сотни запросов на получение веб-сервера, хотя максимальная длина должна составлять 100). Я не уверен в том, что происходит внутри Обещания, чтобы добиться такого поведения.
Вот код, который работает в примере:
while (data.length < totalPoints) {
var y = Math.random() * 100;
var value = [now += updateInterval, y];
data.push(value);
};
Это кажется достаточно простым. Где написано y (в var value = [now += updateInterval, y];
), заставить «y» получить значение из моего API.
Понятия не имею, как на самом деле этого добиться.
Я следую примеру из этого примера Flot , но мне просто не удается заставить его работать с фактическим живым значением из AJAX или Promise (я даже пытался получить).
Все примеры для «живого обновления таблицы» заканчиваются просто использованием math.random()
, что довольно обманчиво, так как оно просто движется, но на самом деле не работает.
Полагаю, что я не решаю обещание в цикле должным образом, но из-за недостатка опыта на данный момент я даже не уверен, что не так.
Я не уверен, куда в моем коде я бы пошел Y = "live value"
, или я должен возвращать результат где-нибудь? Я не очень хорошо знаком с Promises или AJAX.