讓我們考慮一下我們有一個函數,在某個事件(例如 - scroll
事件)上調用。該功能將更多項目加載到某個列表中。
假設這個函數的邏輯設計如下:
function() {
oldSize = list.length;
// add new items (prepare them in advance)
for (i = 0; i < PAGE_SIZE; i++) list.push({});
$http.get("/next/page/" + oldSize).then(function() {
// here I want operate with oldSize value which is actual on moment of
// the $http.get invocation:
for (i = 0; i < PAGE_SIZE;i++) {
// do something with
list[oldSize + i] = ... ;
}
}
}
的問題是,整個功能可幾乎同時多次調用,什麼導致了作用,即.then(function() {
不當值運行的oldSize
變量 - 它成爲最後list.length
的值,而我需要它被保留,因爲它是在調用的時刻。
例如,如果該事件監聽器被調用幾乎同時的2倍,這將是:
oldSize == 5
,列表增加10(例如)元素。但在$http.get(...).then()
裏面,我需要使用價值oldSize == 5
。第二次調用:
oldSize == 15
(因爲我們在第一次調用時增加了10個元素的列表)。所以在這個特別是$http.get(...).then()
我想有oldSize == 15
。
我希望它很清楚。請不要建議我改變我的邏輯。我只想知道如何爲異步函數的推遲結果保存變量值(在我的情況下,它是$http.get(...).then(...)
)。謝謝。
爲什麼在外部範圍中定義'oldSize'? –
@YuryTarabanko如果我需要在調用get方法之前保存它的值,我應該在哪裏定義它? – Andremoniy
如果你不在這個函數之外使用它(和嵌套的回調函數),你可以簡單地使用'var oldSize = list.length'。否則,請查看下面的答案。 –