async, await
реализация, улучшение по сравнению с @ ответом Топрака
(async() => {
console.log("waiting for variable");
while(!window.hasOwnProperty("myVar")) // define the condition as you like
await new Promise(resolve => setTimeout(resolve, 1000));
console.log("variable is defined");
})();
console.log("above code doesn't block main function stack");
После повторного рассмотрения вопроса ОП. На самом деле есть лучший способ реализовать то, что предполагалось: «обратный вызов набора переменных». Хотя приведенный ниже код работает только в том случае, если нужная переменная инкапсулируется объектом (или окном) вместо объявления let
или var
(я оставил первый ответ, потому что я просто улучшал существующие ответы, не читая оригинал вопрос):
let obj = encapsulatedObject || window;
Object.defineProperty(obj, "myVar", {
configurable: true,
set(v){
Object.defineProperty(obj, "myVar", {
configurable: true, enumerable: true, writable: true, value: v });
console.log("window.myVar is defined");
}
});
см. Object.defineProperty
или используйте es6 proxy (что, вероятно, излишне)