Решил побаловаться TypeScript и es6, а в частности Proxy.
Проблема в том, что в отладчике (Edge) показывется и содержимое и длина arguments,
а вот в коде все методы преобразования в массив возвращается []
или обращения к длине возвращает 0.
class Item {
constructor(public resolve: any, public value: any) { };
}
class CounterComponent {
public currentCount: any;
private dictionary = {};
private proxy: any;
constructor() { this.SetProxy(); }
private SetProxy(): void {
this.proxy = new Proxy({}, {
get: (rcvr, name) => {
return () => {
let args: Array
}
let promise = new Promise((resolve, reject) => {
// resolve(123);
let item = new Item(resolve, args);
this.dictionary[name] = item;
});
return promise;
};
}
});
}
public async CallMethodAsync() {
this.currentCount = await this.proxy.AllHello("Всем Привет");
}
public setResult(): void {
let key: string;
for (let name in this.dictionary) {
key = name;
}
let item =
}
}
При этом await отрабатывает.
И еще есть ли аналог C# финализатор, что бы понять когда объект подвергается сборке мусора.
Ответ
Проблема заключается в том, что одно из ограничений стрелочных функций
Не имеет собственного объекта arguments
Стрелочные функции не имеют собственного объекта arguments, поэтому в теле стрелочных функций arguments будет ссылаться на переменную в окружающей области.
Самое простое решение - использовать не стрелочную функцию, например
get: (rcvr, name) => {
return function() {
let args: Array
Альтернативное решение: использовать rest-параметры
get: (rcvr, name) => {
return (...args)=>{
...
}
}
В этом случае args уже массив и с ним можно работать сразу без дополнительных операций.
Комментариев нет:
Отправить комментарий