我要为多个用户加载一些数据,并将其存储到JavaScript数组中。 在纯TypeScript中,我会像这样写:
for(var i = 0; i < 5; i++) {
promise[i] = httpquery.then(
(data) => { this.usersData[i] = data }
);
)
...
this.$q.all[promise].then(......
很遗憾,我的TypeScript Lambda只保护了这个(而不是变量i)。因此,在我的情况下,它将始终将数据存储在this.usersData[5]中。
没错,我需要一个闭包,而我理解的TypeScript的部分语言是Lambda表达式与闭包有些相似。
所以让我们尝试在TypeScript中做些什么:
for(var i = 0; i < 5; i++) {
promise[i] = (index = i) => {
return httpquery.then(
(data) => { this.usersData[index] = data }
);
}();
)
这段代码完全不起作用(甚至无法编译)。为什么?因为似乎() => {}并不是真正的函数。我通过以下方式解决了这个问题:
for(var i = 0; i < 5; i++) {
var getData = (index = i) => {
return httpquery.then(
(data) => { this.usersData[index] = data }
);
};
promise[i] = getData();
)
我发现这并不是非常美观 :-p。所以我的问题是:在这种情况下该如何处理?像我一样吗?还是有一种更美观的使用 TypeScript 中 Lambda 的方法?为什么呢?
() => {}()
不起作用但是
var test = () => {};
test();
这是由于typescript编译器不够智能,无法理解lambda表达式是一个函数导致的吗?
谢谢。