Обещание JavaScript не работает, как ожидалось - PullRequest
0 голосов
/ 10 октября 2019

Я вызываю две функции 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 миллисекунд друг от друга. Таким образом, он не ожидает завершения одной функции перед вызовом другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...