В NodeJS у меня есть такой объект, как
var scope = { word: "init" };
Использование Object.defineProperty, как описано в MDN Я переписываю функцию get()
чтобы быть таким,
Object.defineProperty(scope, 'word', {
get: function() {
return Math.random();
}
});
, который правильно возвращает новый случайный случай каждый раз, когда я scope.word
в консоли.Однако функция также должна получать данные из функции с обратным вызовом.Так что это работает почти как setTimeout
,
Object.defineProperty(scope, 'word', {
get: function() {
setTimeout(() => {
return Math.random();
}, 1000)
}
});
Теперь каждый раз, когда я делаю scope.word
Я получаю,
undefined
Потому чтофункция get()
является синхронной.Это, конечно, можно решить, вернув Обещание,
Object.defineProperty(scope, 'word', {
get: function() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(Math.random());
}, 1000)
});
}
});
Но тогда мне нужно будет сделать scope.word.then(...)
, но вся идея, которую мы создаем, заключается в том, что разработчик должен иметь scope.word
какесли бы это была простая в использовании переменная. Как в $ scope Angular или в VUE.js 'data' .
Как сделать так, чтобы функция get()
возвращала фактическое значение, а не Promise?Можно ли обойти это, используя async
/ await
?Как?