У меня есть 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'));
});