Я вызываю две функции javascript, которые возвращают данные json с веб-сайта Python Flask и обрабатывают их. Один генерирует таблицу. Другие обновляют таблицу Tabulator . Два вызова одновременно попадают на сервер Flask. Это приводит к сбою сервера Flask. Я использую сайт Flask по умолчанию. Я считаю, что переход на производственный сервер может решить эту проблему. Я тоже работаю над этим.
Кроме того, я не парень из JavaScript.
Я начал использовать Promises для каскадирования при совершении вызовов. У меня даже есть функция, позволяющая просто убить несколько секунд.
//Update Site components with updated timeframe
function updateLogTimeFrame(timeframe){
//Clear table div - id="report-table"
$("#report-table").html("");
var handleAllPromises = Promise.all([promisedReportVar(timeframe), promiseTRSANSG(3), promisedTableVar(timeframe)]);
handleAllPromises.then(function(values) {
console.timeEnd("Promise.All");
console.log("All the promises are resolved", values);
});
handleAllPromises.catch(function(reason) {
console.log("One of the promises failed with the following reason", reason);
});
}
var promiseTRSANSG = (promiseThatResolvesAfterNSecondsGenerator = function(n = 0) {
return new Promise(function(resolve, reject) {
console.log('Waiting...')
setTimeout(function() {
resolve({
resolvedAfterNSeconds: n
});
}, n * 1000);
});
});
var promisedReportVar = (completedReportDiv = function(timeframe) {
new Promise( function( resolve, reject){
console.log('Running Report');
//Update Report - Returns true
var reportLink = "http://10.58.110.67:5000/getReport/" + timeframe
completedVar = updateReport(reportLink);
resolve(completedVar)
});
});
var promisedTableVar = (completedTableDiv = function(timeframe) {
new Promise( function( resolve, reject){
console.log('Updating Table');
//Update Table - Updates table (Tabulator)
var dataLink = "http://10.58.110.67:5000/showLogs/" + timeframe
table.setData(dataLink);
resolve();
});
});
Я могу запустить любой promiseReportVar или promotiableVar, и код работает нормально. Я предполагаю, что я не использую обещания правильно. Если я посмотрю на «Водопад» в браузере, то увижу, что два запроса json (выполняемые в функциях updateReport и table.setData) происходят в течение 2 миллисекунд друг от друга. Таким образом, он не ожидает завершения одной функции перед вызовом другой.