Показать сообщение отдельно
  #1 (permalink)  
Старый 16.12.2016, 21:23
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Как асинхронно вызвать resolve() вне Promise?
Всем привет! Понадобился Promise, который бы выполнялся, когда объект с данными создан. Необходимо, чтобы сторонний код "приостанавливал" выполнение моего скрипта, пока объект не будет готов.

Я считаю, что нет необходимости запихивать длинные куски кода в Promise только ради того, чтобы вызвать resolve() или reject().
Поэксперементировал с аксессорами...

var setter;
var promise = new Promise(function(resolve, reject) {
	setter = function(value) {
		if(value) {
			resolve();
		}
	};
});

Object.defineProperty(this, "objectCreated", {
	set: setter,
	get: function() {
		return promise;
	}
});

// много строк спустя...

this.objectCreated = true;


Hо пришлось отказаться от этой идеи, поскольку появляются лишние переменные. И выглядит это ужасно. Думаю, более элегантным (по аналогии с Promise.resolve()) решением проблемы является метод Promise.prototype.resolve(), который заставляет выполниться Promise.

Promise.prototype.resolve = function(value) {
	// как здесь вызвать resolve() ?
};
Ответить с цитированием