【发布时间】:2016-05-18 03:55:18
【问题描述】:
我为多个用户加载了一些数据,我想将其存储到一个 javascript 数组中。 在纯打字稿中,我会这样写:
for(var i = 0; i < 5; i++) {
promise[i] = httpquery.then(
(data) => { this.usersData[i] = data }
);
)
...
this.$q.all[promise].then(......
不幸的是,我的打字稿 lambda 只保护这个(而不是变量 i)。所以在我的情况下,它将始终将数据存储在 this.usersData[5] 中。
对,我需要一个闭包,而 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();
有效吗?是因为打字稿编译器不够“聪明”,无法理解 lambda 是一个函数吗?
谢谢。
【问题讨论】:
标签: lambda typescript closures