Как заставить подождать выполнения обработчика Proxy после отслеживаемого действия (например, подождать обработчик Proxy операции присовения, а уже потом продолжить исполнение)?
Скорее всего, я что-то не допонимаю или упустил. Спасибо за ответы.
Упрощенный пример:
function PromiseTimeOut() {
return new Promise((resolve, reject) => {
setTimeout(resolve ,1000);
});
}
const target = {
value: null,
setValue(value) {
this.value = value;
console.log(this.value); //Тут будет NULL
}
};
const proxy = new Proxy(target, {
get(target, prop) {
return target[prop];
},
async set(target, prop, value) {
await PromiseTimeOut();
target[prop] = value;
return true;
}
});
proxy.setValue(1);
//В этом месте исполнение должно подождать асинхронного обработчика Proxy.set
console.log(proxy.value);//И тут будет NULL
Пробовал также делать set обработчик синхронной, а в target[prop] присваивать Promise. Все равно само присваивание в обработчике происходит позже.
function PromiseTimeOut() {
return new Promise((resolve, reject) => {
setTimeout(resolve ,1000);
});
}
const target = {
value: null,
async setValue(value) {
this.value = value;
await this.value; // СЮДА НЕ ПРИХОДИТ ПРОКСИ, а по идее должен
console.log(this.value); //Тут будет NULL
}
};
const proxy = new Proxy(target, {
get(target, prop) {
return target[prop];
},
set(target, prop, value) {
target[prop] = new Promise(async (resolve, reject) => {
await PromiseTimeOut();
resolve();
});
return true;
}
});
proxy.setValue(1);
Делаю на node.js последней версии. Использую новый синтаксис async/await