Здравствуйте. Что если код дойдет до await.fetch() и в этот момент сработает интервал и удалит массив, в который мы собираемся пушить данные после асинхронной операции, мы получим 'Cannot read property 'push' of undefined'?)
const session = {
unanswered: [],
isRedirect: true,
date: 1545762010253
};
client.on('message', async (msg) => {
if (session.isRedirect) {
await fetch(...);
session.unanswered.push(msg.id);
} else {
session.isRedirect = true;
session.unanswered = [];
session.date = Date.now() + 60 * 1000;
}
});
setInterval(() => {
if (Date.now() > session.date) {
session.isRedirect = false;
delete session.unanswered;
}
}, 100);
Исправит ли эту проблему заворачивание коллбека в setImmediate() и будет ли это хорошим решением данной проблемы?
На самом деле пример плохой и не отражает моей проблемы. Мне нужно чтобы когда одна функцию манипулирует над объектом ей не мешали другие. setImmediate бы подошел (он как я понял ставит исполнение коллбека перед интервалом), но когда в on('message') вызываются асинхронные функции поток выполнения передается интервалу и все в кашу :)