Я хочу определить свойство объекта только для чтения, которое асинхронно извлекает значение, а затем возвращает его с помощью новых геттеров EcmaScript 5.
Однако свойство всегда возвращает undefined
, даже несмотря на то, что magicValue
в приведенном ниже примере кода окончательно никогда не является неопределенным. Кроме того, когда я просто return 'xxx';
, напечатанное значение по-прежнему равно undefined
. Это работает только тогда, когда я return
вне функции обратного вызова.
Кажется, что return
выполняется немедленно, независимо от того, вызывается ли обратный вызов myAsyncFunction
. Я не уверен, является ли это ошибкой в V8 или я злоупотребляю геттерами JavaScript.
Могу ли я заставить это работать? Я подумал, что, поскольку теперь я могу использовать геттеры и сеттеры, я буду использовать геттеры/сеттеры для чтения и записи свойств и обычных функций для выполнения определенных задач.
var User = function (id) {
this.id = id;
};
Object.defineProperty(User.prototype, 'magic', {
get : function () {
myAsyncFunction(function (magicValue) {
return magicValue;
});
}
});
var u = new User(5);
console.log(u.magic);
Печатает undefined
.
myAsyncFunction
никогда не вызывается — он просто объявляется. Какова природа вашей асинхронной операции? - person Mitya   schedule 07.08.2012