Skip to content

components.SceneLinkedPromise

vasili.kostin edited this page Aug 27, 2021 · 7 revisions

компоненты : Иконка компонента SceneLinkedPromise

Ожидается, что разработчик владеет знаниями о javascript Promise, перед прочтением данного раздела.

SceneLinkedPromise - компонент, аналог javascript Promise, который используется как интерфейс для асинхронных операций. SceneLinkedPromise не доступен для добавления на сцену через редактор сцен, и используется только из javascript вызовом статического метода SceneLinkedPromise.promise().

Почему в игровой логике следует использовать SceneLinkedPromise вместо стандартного для javascript Promise()? Promise, созданный через SceneLinkedPromise.promise(), автоматически привязывается к текущей сцене, и если игрок закроет сцену и выйдет в главное меню игры, или на экране появится модальный диалог, Promise будет приостановлен, до возвращения игрока в сцену, в которой Promise был создан. В дополнение, в игровом редакторе, игра может быть поставлена на паузу в целях отладки. Если сцена или объект, к которому Promise привязан, уничтожается - то Promise будет отменен автоматически, при этом, только finally обработчики будут вызваны. Это позволяет избежать большого количества ошибок при разработке. Более того, SceneLinkedPromise облегчает отладку ошибок, происходящих внутри обработчиков, так как не перехватывает исключения при запуске игры в редакторе и в отладочном билде.

Методы:

SceneLinkedPromise.promise(executor : Function, owner : DisplayObject = game.currentContainer)

Возвращаемый тип: SceneLinkedPromise

Данный метод создает новый SceneLinkedPromise, привязанный к объекту сцены, переданному в качестве параметра owner. В параметр executor должна быть передана функция, принимающая два колбека resolve и reject, аналогично стандартному Promise.

	import SceneLinkedPromise from "thing-editor/js/engine/components/scene-linked-request.js";

	var promise1 = SceneLinkedPromise.promise(function(resolve, reject, promise) {
		setTimeout(function() {
			if(Math.random() > 0.5) {
				resolve('foo');
			} else {
				reject('error');
			}
		}, 300);
	});
	promise1.then((value) {
		console.log(value);
		// ожидаемый вывод: "foo"
	});
	promise1.catch((err) {
		console.log(err);
		// ожидаемый вывод: "error"
	});
	promise1.finally(() {
		// SceneLinkedPromise был завершен, либо удален со сцены до того как он был завершен.
		console.log('Promise finished or removed from scene before it was finished.');
	});

Фактически, разрешение Promise происходит внутри метода update, компонента SceneLinkedPromise. Это автоматически приостанавливает Promise, в случае, если сцена, к которой Promise привязано, в данный момент не активна.

Если SceneLinkedPromise.promise метод вызван из onShow метода сцены, и в качестве owner указан объект game.currentFader, то созданный Promise будет привязан к фейдеру, и сцена не начнет отображаться до тех пор, пока Promise не будет разрешен.


SceneLinkedPromise.all(array : Array<SceneLinkedPromise>)

Возвращаемый тип: SceneLinkedPromise

Метод работает аналогично стандартному методу javascript Promise.all


SceneLinkedPromise.resolve(value : *)

Возвращаемый тип: SceneLinkedPromise

Метод работает аналогично стандартному методу javascript Promise.resolve


<- Предыдущая страница Следующая страница ->

Связанные темы:

Привязанный ко времени сцены игровой таймаут (Delay)

Компоненты

Редактируемые поля

Clone this wiki locally