"Мне нужно дождаться завершения WizardScene и затем запустить console.log, проблема в том, что ожидание перед ctx.scene.enter ничего не ждет, и выводится сообщение hello world мгновенно.
Есть ли что-то, что позволяет мне ждать результатов Волшебника?
Если нет, как еще я могу справиться с этой ситуацией? "
Я не использую Telegraf, но если каждая попытка не удалась, возможно, стоит рассмотреть возможность использования пользовательских событий , чтобы уведомить о готовности WizardScene. Это, вероятно, поможет вам решить проблему «Привет, мир печатается мгновенно ...»
Вместо await
или сцены, которая будет готова, вместо этого прослушайте уведомление (событие) о готовности. Перейдите к той части кода, в которой сцена «готова», а затем отправьте событие, чтобы уведомить о завершении обработки кода.
Базовый пример пользовательского события:
<!DOCTYPE html>
<html>
<body>
<script>
//# define Event
var myReadyEvent = new CustomEvent("evt_WizardIsReady");
//# create Event handling function
function doWizardIsReady(evt)
{
alert("Got Event... : " + evt.type);
console.log("hello world");
}
//# some function to trigger Event
function doSomething()
{
//# eg: prepare your scene here
//# and then dispatch at end of setup (before any RETURNs)
document.body.dispatchEvent( myReadyEvent );
}
document.body.addEventListener("evt_WizardIsReady", doWizardIsReady, false);
setTimeout(doSomething, 6000); //represents waiting time for WIzardScene to be ready...
</script>
</body>
</html>
Глядя на ваш код ...
Вы хотите сделать: document.body.dispatchEvent( myReadyEvent );
В качестве альтернативы рассмотрите возможность редактирования исходного кода Telegraf:
- context.js - отредактируйте функцию
enter
в строке 43.
Попробуйте отправить событие перед строкой return handler(this.ctx, noop)
.
document.body.dispatchEvent( myReadyEvent );
return handler(this.ctx, noop)
Затем в основном HTML-коде (который загружает все эти внешние файлы JS) вы можете получить отправленное событие следующим образом:
<body>
<script type="text/javascript" src="context.js"></script>
<script>
//# define Event
var myReadyEvent = new CustomEvent("evt_WizardIsReady");
document.body.addEventListener("evt_WizardIsReady", doWizardIsReady, false);
//# create Event handling function
function doWizardIsReady(evt)
{
alert("Got Event... : " + evt.type);
console.log("hello world");
}
</script>
</body>
- См. Также: stage.js - Убедитесь, что
enter
работает в строке 37. Стоит ли редактировать это с помощью специального события?