asyn c функция в событии socket.on - PullRequest
0 голосов
/ 17 марта 2020

У меня есть node.js бэкэнд, отправляющий событие socket.io в интерфейсный браузер с именем chartDataIncomingFromBackend. Он передает «данные», которые являются данными диаграммы, которые будут обновлять диаграмму через l oop. Я не могу заставить работать аспект asyn c, потому что for l oop все еще блокирует основной поток. Не могли бы вы дать мне знать, что нужно изменить, чтобы он правильно запускался asyn c?

Получается следующее нарушение консоли:

[Нарушение] 'сообщение' обработчик занял 5461мс

Страница не позволит мне ничего сделать, пока не завершится функция pushNewChartDataToFrontend ().

async function pushNewChartDataToFrontend(data){
    let promise = new Promise((resolve,reject) =>{          
        if(data) {
            console.log('here is the chartDataIncomingFromBackend data');
            console.log(data);

            for (let elem in data['data']){
                console.log('inside for loop for chartDataIncomingFromBackend');            
                var utc_timestamp = moment.utc(data['data'][elem]['end_time']);
                //valueOf gets the value of utc time
                chartDate = Number(utc_timestamp.valueOf());

                dataTable.addData([{"x": chartDate, "open": data['data'][elem]['open'], "high": data['data'][elem]['high'], "low": data['data'][elem]['low'], "close": data['data'][elem]['close']}]);      
            }

            resolve('frontend updated with new chart data');    

        } else {
            console.log("There is a problem:", data);
            reject(Error('Frontend had and error updating the chart'));
        }               
    });

    let result = await promise;
    //console.log(result);
}


socket.on('chartDataIncomingFromBackend', async (data) => {
    await pushNewChartDataToFrontend(data).then(console.log('update the chart is done'));
});

1 Ответ

0 голосов
/ 17 марта 2020

Если вы вызываете функцию pushNewChartDataToFrontend с помощью await, тогда вам не нужно использовать ее в функции.

var returnValue = await pushNewChartDataToFrontend(data); 

returnValue будет содержать возвращаемое значение из функции

...