我加載了一些數據爲多個用戶,我想將它存儲到一個JavaScript數組。 在純打字稿,我會寫這樣的:打字稿lambdas和封閉(範圍)
for(var i = 0; i < 5; i++) {
promise[i] = httpquery.then(
(data) => { this.usersData[i] = data }
);
)
...
this.$q.all[promise].then(......
不幸的是,我的打字稿拉姆達保護僅此(而不是變量i)。所以在我的情況下,它總是將數據存儲在this.usersData [5]中。
對,我需要一個閉包,而且據我瞭解這個打字稿的部分語言,lambda表達式有點類似於閉包。
所以讓我們嘗試做一些與打字稿:
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。 所以我的問題是:如何處理這個問題?像我一樣?或者有更好的方式在打字稿中使用lambda? 爲什麼
() => {}()
沒有工作,但
var test =() => {};
test();
的作品?這是因爲typecript編譯器不夠「聰明」,不足以理解lambda是一個函數嗎?
謝謝。
確實,使用let是最美的解決方案。我仍然使用var,並沒有花時間看let/const,我認爲是改變這種壞習慣的適當時機。 謝謝! – Adavo